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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 Feb 2023 10:25:40 +0000 (11:25 +0100)
commit0e2dba8c0ebeaf2e32b71356ea3df8d578057935
tree44c2ce7d29b3029c217cafd7382cf56d1756e797
parent44610f4c3093bbce3061b77d37bdf1bed8e379da
KVM: x86: fix deadlock for KVM_XEN_EVTCHN_RESET

[ Upstream commit a79b53aaaab53de017517bf9579b6106397a523c ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/kvm/xen.c
tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c