linux-mips
[Top] [All Lists]

[PATCH] MIPS: Don't corrupt page tables on vmalloc fault.

To: linux-mips@linux-mips.org, ralf@linux-mips.org
Subject: [PATCH] MIPS: Don't corrupt page tables on vmalloc fault.
From: David Daney <ddaney@caviumnetworks.com>
Date: Wed, 2 Sep 2009 15:47:34 -0700
Cc: David Daney <ddaney@caviumnetworks.com>
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
The code after the vmalloc_fault: label in do_page_fault() modifies
user page tables, this is not correct for 64-bit kernels.

For 64-bit kernels we should go straight to the no_context handler
skipping vmalloc_fault.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
---
 arch/mips/mm/fault.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index f956ecb..e97a7a2 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -58,11 +58,17 @@ asmlinkage void do_page_fault(struct pt_regs *regs, 
unsigned long write,
         * only copy the information from the master page table,
         * nothing more.
         */
+#ifdef CONFIG_64BIT
+# define VMALLOC_FAULT_TARGET no_context
+#else
+# define VMALLOC_FAULT_TARGET vmalloc_fault
+#endif
+
        if (unlikely(address >= VMALLOC_START && address <= VMALLOC_END))
-               goto vmalloc_fault;
+               goto VMALLOC_FAULT_TARGET;
 #ifdef MODULE_START
        if (unlikely(address >= MODULE_START && address < MODULE_END))
-               goto vmalloc_fault;
+               goto VMALLOC_FAULT_TARGET;
 #endif
 
        /*
@@ -203,6 +209,7 @@ do_sigbus:
        force_sig_info(SIGBUS, &info, tsk);
 
        return;
+#ifndef CONFIG_64BIT
 vmalloc_fault:
        {
                /*
@@ -241,4 +248,5 @@ vmalloc_fault:
                        goto no_context;
                return;
        }
+#endif
 }
-- 
1.6.0.6


<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] MIPS: Don't corrupt page tables on vmalloc fault., David Daney <=