diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-13 12:24:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-13 12:24:04 -0400 |
commit | 5528f9132cf65d4d892bcbc5684c61e7822b21e9 (patch) | |
tree | 46ad9b7a106a42579b869b42bf237a663370a613 /mm/memory.c | |
parent | 320b2b8de12698082609ebbc1a17165727f4c893 (diff) |
mm: fix missing page table unmap for stack guard page failure case
.. 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>
Diffstat (limited to 'mm/memory.c')
-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 9606ceb3c165..9b3b73f4ae9c 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -2792,8 +2792,10 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma, | |||
2792 | spinlock_t *ptl; | 2792 | spinlock_t *ptl; |
2793 | pte_t entry; | 2793 | pte_t entry; |
2794 | 2794 | ||
2795 | if (check_stack_guard_page(vma, address) < 0) | 2795 | if (check_stack_guard_page(vma, address) < 0) { |
2796 | pte_unmap(page_table); | ||
2796 | return VM_FAULT_SIGBUS; | 2797 | return VM_FAULT_SIGBUS; |
2798 | } | ||
2797 | 2799 | ||
2798 | if (!(flags & FAULT_FLAG_WRITE)) { | 2800 | if (!(flags & FAULT_FLAG_WRITE)) { |
2799 | entry = pte_mkspecial(pfn_pte(my_zero_pfn(address), | 2801 | entry = pte_mkspecial(pfn_pte(my_zero_pfn(address), |