From: Eric Lin Date: Fri, 4 Dec 2020 05:42:59 +0000 (+0800) Subject: riscv/mm: Prevent kernel module to access user memory without uaccess routines X-Git-Tag: accepted/tizen/unified/20230118.172025~7720^2~72 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=21855cac82d3264aa660deafa9c26b8eef548b7a;p=platform%2Fkernel%2Flinux-rpi.git riscv/mm: Prevent kernel module to access user memory without uaccess routines We found this issue in an legacy out-of-tree kernel module which didn't properly access user space pointer by get/put_user(). Such an illegal access loops in the page fault handler. To resolve this, let it die here. Signed-off-by: Eric Lin Reviewed-by: Pekka Enberg Signed-off-by: Palmer Dabbelt --- diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c index 0d5f06d..33d2841 100644 --- a/arch/riscv/mm/fault.c +++ b/arch/riscv/mm/fault.c @@ -243,6 +243,11 @@ asmlinkage void do_page_fault(struct pt_regs *regs) if (user_mode(regs)) flags |= FAULT_FLAG_USER; + if (!user_mode(regs) && addr < TASK_SIZE && + unlikely(!(regs->status & SR_SUM))) + die_kernel_fault("access to user memory without uaccess routines", + addr, regs); + perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); if (cause == EXC_STORE_PAGE_FAULT)