From: David Daney Date: Wed, 2 Sep 2009 22:47:34 +0000 (-0700) Subject: MIPS: Don't corrupt page tables on vmalloc fault. X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=2ca2ebfd952d0338a0972c1f1f56b9b0c1a3b09c;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git 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: David Daney Signed-off-by: Ralf Baechle --- diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index f956ecbb8136..e97a7a2fb2c0 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 }