]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
xtensa: align: validate access in fast_load_store
authorRicky Ringler <richard.rringler@gmail.com>
Mon, 15 Dec 2025 14:33:23 +0000 (08:33 -0600)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 15 Dec 2025 14:55:40 +0000 (06:55 -0800)
access_ok() is used only in user mode and
branches to .Linvalid_instruction on fault.
Kernel mode skips access_ok().

Tested-by: Ricky Ringler <richard.rringler@gmail.com>
Signed-off-by: Ricky Ringler <richard.rringler@gmail.com>
Message-ID: <20251215143323.2771889-1-richard.rringler@gmail.com>
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/kernel/align.S

index ee97edce2300fab94d0cbffe16fc5dd73d527dec..f2d0d831ce43cdaa4cd26e3bdda9a8812544207b 100644 (file)
@@ -21,6 +21,9 @@
 #include <asm/asm-offsets.h>
 #include <asm/asmmacro.h>
 #include <asm/processor.h>
+#ifdef CONFIG_MMU
+#include <asm/asm-uaccess.h>
+#endif
 
 #if XCHAL_UNALIGNED_LOAD_EXCEPTION || defined CONFIG_XTENSA_LOAD_STORE
 #define LOAD_EXCEPTION_HANDLER
@@ -185,8 +188,11 @@ ENTRY(fast_load_store)
 
 #ifdef CONFIG_MMU
        /* l32e can't be used here even when it's available. */
-       /* TODO access_ok(a3) could be used here */
-       j       .Linvalid_instruction
+       rsr     a6, ps
+       bbci.l  a6, PS_UM_BIT, 1f # kernel mode
+       movi    a5, 8
+       access_ok a3, a5, a6, a2, .Linvalid_instruction
+1:
 #endif
        l32i    a5, a3, 0
        l32i    a6, a3, 4