• Igor Mammedov's avatar
    xen: x86_32: do not enable iterrupts when returning from exception in interrupt context · d198d499
    Igor Mammedov authored
    If vmalloc page_fault happens inside of interrupt handler with interrupts
    disabled then on exit path from exception handler when there is no pending
    interrupts, the following code (arch/x86/xen/xen-asm_32.S:112):
    
    	cmpw $0x0001, XEN_vcpu_info_pending(%eax)
    	sete XEN_vcpu_info_mask(%eax)
    
    will enable interrupts even if they has been previously disabled according to
    eflags from the bounce frame (arch/x86/xen/xen-asm_32.S:99)
    
    	testb $X86_EFLAGS_IF>>8, 8+1+ESP_OFFSET(%esp)
    	setz XEN_vcpu_info_mask(%eax)
    
    Solution is in setting XEN_vcpu_info_mask only when it should be set
    according to
    	cmpw $0x0001, XEN_vcpu_info_pending(%eax)
    but not clearing it if there isn't any pending events.
    
    Reproducer for bug is attached to RHBZ 707552
    
    CC: stable@kernel.org
    Signed-off-by: default avatarIgor Mammedov <imammedo@redhat.com>
    Acked-by: default avatarJeremy Fitzhardinge <jeremy@goop.org>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    d198d499
xen-asm_32.S 6.65 KB