]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.0.8/iommu-amd-handle-large-pages-correctly-in-free_pagetable.patch
5.0-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.0.8 / iommu-amd-handle-large-pages-correctly-in-free_pagetable.patch
1 From 0b3fff54bc01e8e6064d222a33e6fa7adabd94cd Mon Sep 17 00:00:00 2001
2 From: Joerg Roedel <jroedel@suse.de>
3 Date: Thu, 18 Jun 2015 10:48:34 +0200
4 Subject: iommu/amd: Handle large pages correctly in free_pagetable
5
6 From: Joerg Roedel <jroedel@suse.de>
7
8 commit 0b3fff54bc01e8e6064d222a33e6fa7adabd94cd upstream.
9
10 Make sure that we are skipping over large PTEs while walking
11 the page-table tree.
12
13 Fixes: 5c34c403b723 ("iommu/amd: Fix memory leak in free_pagetable")
14 Signed-off-by: Joerg Roedel <jroedel@suse.de>
15 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
16
17 ---
18 drivers/iommu/amd_iommu.c | 6 ++++++
19 1 file changed, 6 insertions(+)
20
21 --- a/drivers/iommu/amd_iommu.c
22 +++ b/drivers/iommu/amd_iommu.c
23 @@ -1870,9 +1870,15 @@ static void free_pt_##LVL (unsigned long
24 pt = (u64 *)__pt; \
25 \
26 for (i = 0; i < 512; ++i) { \
27 + /* PTE present? */ \
28 if (!IOMMU_PTE_PRESENT(pt[i])) \
29 continue; \
30 \
31 + /* Large PTE? */ \
32 + if (PM_PTE_LEVEL(pt[i]) == 0 || \
33 + PM_PTE_LEVEL(pt[i]) == 7) \
34 + continue; \
35 + \
36 p = (unsigned long)IOMMU_PTE_PAGE(pt[i]); \
37 FN(p); \
38 } \