diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-13 09:24:04 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-03-21 12:44:11 -0700 |
commit | c8fe7a0e856eda82e595618a6ebe020a82df0adc (patch) | |
tree | 5464867f14a38a1ff2894cc00b2b5c3c3ac54b34 /mm | |
parent | 96a82b14baf22492429323e4ce3ea739ec52b1ca (diff) |
mm: fix missing page table unmap for stack guard page failure case
commit 5528f9132cf65d4d892bcbc5684c61e7822b21e9 upstream.
.. which didn't show up in my tests because it's a no-op on x86-64 and
most other architectures. But we enter the function with the last-level
page table mapped, and should unmap it at exit.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memory.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c index c5f81714b354..01ac735d6737 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -2677,8 +2677,10 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, spinlock_t *ptl; pte_t entry; - if (check_stack_guard_page(vma, address) < 0) + if (check_stack_guard_page(vma, address) < 0) { + pte_unmap(page_table); return VM_FAULT_SIGBUS; + } if (!(flags & FAULT_FLAG_WRITE)) { entry = pte_mkspecial(pfn_pte(my_zero_pfn(address), |