| From 5528f9132cf65d4d892bcbc5684c61e7822b21e9 Mon Sep 17 00:00:00 2001 |
| From: Linus Torvalds <torvalds@linux-foundation.org> |
| Date: Fri, 13 Aug 2010 09:24:04 -0700 |
| Subject: mm: fix missing page table unmap for stack guard page failure case |
| |
| From: Linus Torvalds <torvalds@linux-foundation.org> |
| |
| 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> |
| |
| --- |
| mm/memory.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| --- a/mm/memory.c |
| +++ b/mm/memory.c |
| @@ -2792,8 +2792,10 @@ static int do_anonymous_page(struct mm_s |
| 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), |