diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2010-11-02 03:05:51 -0400 |
---|---|---|
committer | David Woodhouse <David.Woodhouse@intel.com> | 2011-01-17 11:21:42 -0500 |
commit | 7a6610139a1e1d9297dd1c5d178022eac36839cb (patch) | |
tree | 48ffd3762fa1961bfce3001f3783091e29142a58 /drivers/pci/intel-iommu.c | |
parent | e78bf5e6cbe837daa6ab628a5f679548742994d3 (diff) |
intel-iommu: Fix use after release during device attach
Obtain the new pgd pointer before releasing the page containing this
value.
Cc: stable@kernel.org
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Sheng Yang <sheng@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'drivers/pci/intel-iommu.c')
-rw-r--r-- | drivers/pci/intel-iommu.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c index 4789f8e8bf7a..35463ddf10a1 100644 --- a/drivers/pci/intel-iommu.c +++ b/drivers/pci/intel-iommu.c | |||
@@ -3627,9 +3627,9 @@ static int intel_iommu_attach_device(struct iommu_domain *domain, | |||
3627 | 3627 | ||
3628 | pte = dmar_domain->pgd; | 3628 | pte = dmar_domain->pgd; |
3629 | if (dma_pte_present(pte)) { | 3629 | if (dma_pte_present(pte)) { |
3630 | free_pgtable_page(dmar_domain->pgd); | ||
3631 | dmar_domain->pgd = (struct dma_pte *) | 3630 | dmar_domain->pgd = (struct dma_pte *) |
3632 | phys_to_virt(dma_pte_addr(pte)); | 3631 | phys_to_virt(dma_pte_addr(pte)); |
3632 | free_pgtable_page(pte); | ||
3633 | } | 3633 | } |
3634 | dmar_domain->agaw--; | 3634 | dmar_domain->agaw--; |
3635 | } | 3635 | } |