aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-08-13 12:24:04 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-13 12:24:04 -0400
commit5528f9132cf65d4d892bcbc5684c61e7822b21e9 (patch)
tree46ad9b7a106a42579b869b42bf237a663370a613
parent320b2b8de12698082609ebbc1a17165727f4c893 (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>
-rw-r--r--mm/memory.c4
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),