summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-08-13 09:24:04 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-08-13 13:20:27 -0700
commitab832422673d1774c4ce3941f2ac87743d73bded (patch)
tree52c7a9fa6cef2e63be7777dd9a0204f0d4b557d5 /mm
parent7e281afe24330aeea86113ac241eabdac8ba2311 (diff)
downloadlwn-ab832422673d1774c4ce3941f2ac87743d73bded.tar.gz
lwn-ab832422673d1774c4ce3941f2ac87743d73bded.zip
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.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 92ef198a7670..76d1b2116f9f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2662,8 +2662,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),