Add a synchronize_rcu() after setting the posted interrupt wakeup handler to ensure all readers, i.e. in-flight IRQ handlers, see the new handler before returning to the caller. If the caller is an exiting module and is unregistering its handler, failure to wait could result in the IRQ handler jumping into an unloaded module. Fixes: f6b3c72c2366 ("x86/irq: Define a global vector for VT-d Posted-Interrupts") Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> --- arch/x86/kernel/irq.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index e28f6a5d14f1..20773d315308 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -293,6 +293,7 @@ void kvm_set_posted_intr_wakeup_handler(void (*handler)(void)) kvm_posted_intr_wakeup_handler = handler; else kvm_posted_intr_wakeup_handler = dummy_handler; + synchronize_rcu(); } EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler); -- 2.33.0.882.g93a45727a2-goog