Commit 2ca2ebfd authored by David Daney's avatar David Daney Committed by Ralf Baechle

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

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: default avatarDavid Daney <ddaney@caviumnetworks.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent e0cc87f5
...@@ -58,11 +58,17 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long write, ...@@ -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, * only copy the information from the master page table,
* nothing more. * 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)) if (unlikely(address >= VMALLOC_START && address <= VMALLOC_END))
goto vmalloc_fault; goto VMALLOC_FAULT_TARGET;
#ifdef MODULE_START #ifdef MODULE_START
if (unlikely(address >= MODULE_START && address < MODULE_END)) if (unlikely(address >= MODULE_START && address < MODULE_END))
goto vmalloc_fault; goto VMALLOC_FAULT_TARGET;
#endif #endif
/* /*
...@@ -203,6 +209,7 @@ do_sigbus: ...@@ -203,6 +209,7 @@ do_sigbus:
force_sig_info(SIGBUS, &info, tsk); force_sig_info(SIGBUS, &info, tsk);
return; return;
#ifndef CONFIG_64BIT
vmalloc_fault: vmalloc_fault:
{ {
/* /*
...@@ -241,4 +248,5 @@ vmalloc_fault: ...@@ -241,4 +248,5 @@ vmalloc_fault:
goto no_context; goto no_context;
return; return;
} }
#endif
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment