]> xenbits.xensource.com Git - xen.git/commitdiff
x86/vMSI-x: check whether msixtbl_list in msixtbl_pt_register()
authorChao Gao <chao.gao@intel.com>
Mon, 1 Aug 2016 16:22:54 +0000 (18:22 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 1 Aug 2016 16:22:54 +0000 (18:22 +0200)
MSI-x tables' initializtion had been deferred in the commit
74c6dc2d0ac4dcab0c6243cdf6ed550c1532b798. If an assigned device does not support
MSI-x, the msixtbl_list won't be initialized. However, the following paths
    XEN_DOMCTL_bind_pt_irq
pt_irq_create_bind
    msixtbl_pt_register
do not check this case. Some errors(malwares, etc.) may lead to calling
XEN_DOMCTL_bind_pt_irq without a clear gtable and will cause Xen panic.

Signed-off-by: Chao Gao <chao.gao@intel.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/hvm/vmsi.c

index ef1dfff8d7020d09e121e9b92206f432cc0e3166..d81c5d47c6699f443cf076cf1047f13e0f2a1f10 100644 (file)
@@ -459,7 +459,7 @@ int msixtbl_pt_register(struct domain *d, struct pirq *pirq, uint64_t gtable)
     ASSERT(pcidevs_locked());
     ASSERT(spin_is_locked(&d->event_lock));
 
-    if ( !has_vlapic(d) )
+    if ( !msixtbl_initialised(d) )
         return -ENODEV;
 
     /*