• Jiang Liu's avatar
    iommu/vt-d: Avoid caching stale domain_device_info when hot-removing PCI device · 7e7dfab7
    Jiang Liu authored
    Function device_notifier() in intel-iommu.c only remove domain_device_info
    data structure associated with a PCI device when handling PCI device
    driver unbinding events. If a PCI device has never been bound to a PCI
    device driver, there won't be BUS_NOTIFY_UNBOUND_DRIVER event when
    hot-removing the PCI device. So associated domain_device_info data
    structure may get lost.
    
    On the other hand, if iommu_pass_through is enabled, function
    iommu_prepare_static_indentify_mapping() will create domain_device_info
    data structure for each PCIe to PCIe bridge and PCIe endpoint,
    no matter whether there are drivers associated with those PCIe devices
    or not. So those domain_device_info data structures will get lost when
    hot-removing the assocated PCIe devices if they have never bound to
    any PCI device driver.
    
    To be even worse, it's not only an memory leak issue, but also an
    caching of stale information bug because the memory are kept in
    device_domain_list and domain->devices lists.
    
    Fix the bug by trying to remove domain_device_info data structure when
    handling BUS_NOTIFY_DEL_DEVICE event.
    Signed-off-by: default avatarJiang Liu <jiang.liu@linux.intel.com>
    Signed-off-by: default avatarJoerg Roedel <joro@8bytes.org>
    7e7dfab7
intel-iommu.c 109 KB