• Hidetoshi Seto's avatar
    PCI MSI: Return if alloc_msi_entry for MSI-X failed · 0d073489
    Hidetoshi Seto authored
    In current code it continues setup even if alloc_msi_entry() for MSI-X
    is failed due to lack of memory.  It means arch_setup_msi_irqs() might
    be called with msi_desc entries less than its argument nvec.
    
    At least x86's arch_setup_msi_irqs() uses list_for_each_entry() for
    dev->msi_list that suspected to have entries same numbers as nvec, and
    it doesn't check the number of allocated vectors and passed arg nvec.
    Therefore it will result in success of pci_enable_msix(), with less
    vectors allocated than requested.
    
    This patch fixes the error route to return -ENOMEM, instead of continuing
    the setup (proposed by Matthew Wilcox).
    
    Note that there is no iounmap in msi_free_irqs() if no msi_disc is
    allocated.
    Reviewed-by: default avatarMatthew Wilcox <matthew@wil.cx>
    Signed-off-by: default avatarHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    0d073489
msi.c 20.6 KB