[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging-4.16] x86/irq: skip unmap_domain_pirq XSM during destruction



commit b58fb6e81bd55b6bd946abc3070770f7994c9ef9
Author:     Jason Andryuk <jandryuk@xxxxxxxxx>
AuthorDate: Tue Jun 7 13:55:39 2022 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Tue Jun 7 13:55:39 2022 +0200

    x86/irq: skip unmap_domain_pirq XSM during destruction
    
    xsm_unmap_domain_irq was seen denying unmap_domain_pirq when called from
    complete_domain_destroy as an RCU callback.  The source context was an
    unexpected, random domain.  Since this is a xen-internal operation,
    going through the XSM hook is inapproriate.
    
    Check d->is_dying and skip the XSM hook when set since this is a cleanup
    operation for a domain being destroyed.
    
    Suggested-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    Signed-off-by: Jason Andryuk <jandryuk@xxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
    master commit: 2e6f95a942d1927a53f077c301db0b799c54c05a
    master date: 2022-04-08 14:51:52 +0200
---
 xen/arch/x86/irq.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c
index 67cbf6b979..47b86af5dc 100644
--- a/xen/arch/x86/irq.c
+++ b/xen/arch/x86/irq.c
@@ -2342,8 +2342,14 @@ int unmap_domain_pirq(struct domain *d, int pirq)
         nr = msi_desc->msi.nvec;
     }
 
-    ret = xsm_unmap_domain_irq(XSM_HOOK, d, irq,
-                               msi_desc ? msi_desc->dev : NULL);
+    /*
+     * When called by complete_domain_destroy via RCU, current is a random
+     * domain.  Skip the XSM check since this is a Xen-initiated action.
+     */
+    if ( !d->is_dying )
+        ret = xsm_unmap_domain_irq(XSM_HOOK, d, irq,
+                                   msi_desc ? msi_desc->dev : NULL);
+
     if ( ret )
         goto done;
 
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.16



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.