lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 059/917] x86/irq: Ensure PI wakeup handler is unregistered before module unload
    Date
    From: Sean Christopherson <seanjc@google.com>

    commit 6ff53f6a438f72998f56e82e76694a1df9d1ea2c upstream.

    Add a synchronize_rcu() after clearing 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.

    The registration path doesn't require synchronization, as it's the
    caller's responsibility to not generate interrupts it cares about until
    after its handler is registered.

    Fixes: f6b3c72c2366 ("x86/irq: Define a global vector for VT-d Posted-Interrupts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Message-Id: <20211009001107.3936588-2-seanjc@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/x86/kernel/irq.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/arch/x86/kernel/irq.c
    +++ b/arch/x86/kernel/irq.c
    @@ -291,8 +291,10 @@ void kvm_set_posted_intr_wakeup_handler(
    {
    if (handler)
    kvm_posted_intr_wakeup_handler = handler;
    - else
    + else {
    kvm_posted_intr_wakeup_handler = dummy_handler;
    + synchronize_rcu();
    + }
    }
    EXPORT_SYMBOL_GPL(kvm_set_posted_intr_wakeup_handler);


    \
     
     \ /
      Last update: 2021-11-16 02:15    [W:2.962 / U:0.224 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site