iommu/vt-d: Avoid caching stale domain_device_info and fix memory leak
Function device_notifier() in intel-iommu.c fails to remove device_domain_info data structures for PCI devices if they are associated with si_domain because iommu_no_mapping() returns true for those PCI devices. This will cause memory leak and caching of stale information in domain->devices list. So fix the issue by not calling iommu_no_mapping() and skipping check of iommu_pass_through. Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Signed-off-by: Joerg Roedel <joro@8bytes.org>
This commit is contained in:
parent
989d51fc99
commit
816997d03b
|
@ -3600,14 +3600,14 @@ static int device_notifier(struct notifier_block *nb,
|
|||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct dmar_domain *domain;
|
||||
|
||||
if (iommu_no_mapping(dev))
|
||||
if (iommu_dummy(pdev))
|
||||
return 0;
|
||||
|
||||
domain = find_domain(pdev);
|
||||
if (!domain)
|
||||
return 0;
|
||||
|
||||
if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through) {
|
||||
if (action == BUS_NOTIFY_UNBOUND_DRIVER) {
|
||||
domain_remove_one_dev_info(domain, pdev);
|
||||
|
||||
if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
|
||||
|
|
Loading…
Reference in a new issue