• Paolo Bonzini's avatar
    KVM: x86: disable interrupts while pvclock_gtod_sync_lock is taken · a83829f5
    Paolo Bonzini authored
    pvclock_gtod_sync_lock can be taken with interrupts disabled if the
    preempt notifier calls get_kvmclock_ns to update the Xen
    runstate information:
    
       spin_lock include/linux/spinlock.h:354 [inline]
       get_kvmclock_ns+0x25/0x390 arch/x86/kvm/x86.c:2587
       kvm_xen_update_runstate+0x3d/0x2c0 arch/x86/kvm/xen.c:69
       kvm_xen_update_runstate_guest+0x74/0x320 arch/x86/kvm/xen.c:100
       kvm_xen_runstate_set_preempted arch/x86/kvm/xen.h:96 [inline]
       kvm_arch_vcpu_put+0x2d8/0x5a0 arch/x86/kvm/x86.c:4062
    
    So change the users of the spinlock to spin_lock_irqsave and
    spin_unlock_irqrestore.
    
    Reported-by: syzbot+b282b65c2c68492df769@syzkaller.appspotmail.com
    Fixes: 30b5c851 ("KVM: x86/xen: Add support for vCPU runstate information")
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Cc: Marcelo Tosatti <mtosatti@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    a83829f5
x86.c 306 KB