diff options
author | Lu Baolu <baolu.lu@linux.intel.com> | 2017-11-03 19:51:34 +0300 |
---|---|---|
committer | Alex Williamson <alex.williamson@redhat.com> | 2017-11-03 19:51:34 +0300 |
commit | 4fa064b26c2eb9e1c38460ba327765dff16a4b14 (patch) | |
tree | dad10948cb5ed2933375afbee03d29d25786c76e /drivers | |
parent | 973b546451fdf11e518cc96d1b137af893a38db5 (diff) | |
download | linux-4fa064b26c2eb9e1c38460ba327765dff16a4b14.tar.xz |
iommu/vt-d: Clear pasid table entry when memory unbound
In intel_svm_unbind_mm(), pasid table entry must be cleared during
svm free. Otherwise, hardware may be set up with a wild pointer.
Suggested-by: Ashok Raj <ashok.raj@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/iommu/intel-svm.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/iommu/intel-svm.c b/drivers/iommu/intel-svm.c index 43280ca282df..ed1cf7c5a43b 100644 --- a/drivers/iommu/intel-svm.c +++ b/drivers/iommu/intel-svm.c @@ -458,6 +458,8 @@ int intel_svm_unbind_mm(struct device *dev, int pasid) kfree_rcu(sdev, rcu); if (list_empty(&svm->devs)) { + svm->iommu->pasid_table[svm->pasid].val = 0; + wmb(); idr_remove(&svm->iommu->pasid_idr, svm->pasid); if (svm->mm) |