Messages in this thread Patch in this message | | | From | Eric Lin <> | Subject | [PATCH v2 2/2] riscv/mm: Prevent kernel module to access user memory without uaccess routines | Date | Thu, 3 Dec 2020 14:48:26 +0800 |
| |
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 <tesheng@andestech.com> Cc: Alan Kao <alankao@andestech.com> --- arch/riscv/mm/fault.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c index 0bcfd0e1b39e..00884c1bac28 100644 --- a/arch/riscv/mm/fault.c +++ b/arch/riscv/mm/fault.c @@ -245,6 +245,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) -- 2.17.0
| |