• Konrad Rzeszutek Wilk's avatar
    xen/pciback: Return error on XEN_PCI_OP_enable_msi when device has MSI or MSI-X enabled · 56441f3c
    Konrad Rzeszutek Wilk authored
    The guest sequence of:
    
     a) XEN_PCI_OP_enable_msi
     b) XEN_PCI_OP_enable_msi
     c) XEN_PCI_OP_disable_msi
    
    results in hitting an BUG_ON condition in the msi.c code.
    
    The MSI code uses an dev->msi_list to which it adds MSI entries.
    Under the above conditions an BUG_ON() can be hit. The device
    passed in the guest MUST have MSI capability.
    
    The a) adds the entry to the dev->msi_list and sets msi_enabled.
    The b) adds a second entry but adding in to SysFS fails (duplicate entry)
    and deletes all of the entries from msi_list and returns (with msi_enabled
    is still set).  c) pci_disable_msi passes the msi_enabled checks and hits:
    
    BUG_ON(list_empty(dev_to_msi_list(&dev->dev)));
    
    and blows up.
    
    The patch adds a simple check in the XEN_PCI_OP_enable_msi to guard
    against that. The check for msix_enabled is not stricly neccessary.
    
    This is part of XSA-157.
    
    CC: stable@vger.kernel.org
    Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
    Reviewed-by: default avatarJan Beulich <jbeulich@suse.com>
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    56441f3c
pciback_ops.c 10.9 KB