Commit 816997d0 authored by Jiang Liu's avatar Jiang Liu Committed by Joerg Roedel

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: default avatarJiang Liu <jiang.liu@linux.intel.com>
Signed-off-by: default avatarJoerg Roedel <joro@8bytes.org>
parent 989d51fc
...@@ -3600,14 +3600,14 @@ static int device_notifier(struct notifier_block *nb, ...@@ -3600,14 +3600,14 @@ static int device_notifier(struct notifier_block *nb,
struct pci_dev *pdev = to_pci_dev(dev); struct pci_dev *pdev = to_pci_dev(dev);
struct dmar_domain *domain; struct dmar_domain *domain;
if (iommu_no_mapping(dev)) if (iommu_dummy(pdev))
return 0; return 0;
domain = find_domain(pdev); domain = find_domain(pdev);
if (!domain) if (!domain)
return 0; return 0;
if (action == BUS_NOTIFY_UNBOUND_DRIVER && !iommu_pass_through) { if (action == BUS_NOTIFY_UNBOUND_DRIVER) {
domain_remove_one_dev_info(domain, pdev); domain_remove_one_dev_info(domain, pdev);
if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) && if (!(domain->flags & DOMAIN_FLAG_VIRTUAL_MACHINE) &&
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment