KVM: x86: fix deadlock for KVM_XEN_EVTCHN_RESET
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 28 Dec 2022 10:33:41 +0000 (05:33 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 28 Dec 2022 10:53:57 +0000 (05:53 -0500)
commita79b53aaaab53de017517bf9579b6106397a523c
tree9dd186153aa405173b6b792843191932244df4c9
parentaf2808906aab0bf5786021d45b3ebfca6f4ad72f
KVM: x86: fix deadlock for KVM_XEN_EVTCHN_RESET

While KVM_XEN_EVTCHN_RESET is usually called with no vCPUs running,
if that happened it could cause a deadlock.  This is due to
kvm_xen_eventfd_reset() doing a synchronize_srcu() inside
a kvm->lock critical section.

To avoid this, first collect all the evtchnfd objects in an
array and free all of them once the kvm->lock critical section
is over and th SRCU grace period has expired.

Reported-by: Michal Luczaj <mhal@rbox.co>
Cc: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/xen.c
tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c