xtensa: fix KASAN report for show_stack
authorMax Filippov <jcmvbkbc@gmail.com>
Fri, 17 Mar 2023 06:00:21 +0000 (23:00 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Fri, 17 Mar 2023 23:44:28 +0000 (16:44 -0700)
show_stack dumps raw stack contents which may trigger an unnecessary
KASAN report. Fix it by copying stack contents to a temporary buffer
with __memcpy and then printing that buffer instead of passing stack
pointer directly to the print_hex_dump.

Cc: stable@vger.kernel.org
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
arch/xtensa/kernel/traps.c

index cd98366a9b238841c7e4aaa021fb623d3eb52136..f0a7d1c2641e0c67f9a652f9c0626a85f7c43184 100644 (file)
@@ -539,7 +539,7 @@ static size_t kstack_depth_to_print = CONFIG_PRINT_STACK_DEPTH;
 
 void show_stack(struct task_struct *task, unsigned long *sp, const char *loglvl)
 {
-       size_t len;
+       size_t len, off = 0;
 
        if (!sp)
                sp = stack_pointer(task);
@@ -548,9 +548,17 @@ void show_stack(struct task_struct *task, unsigned long *sp, const char *loglvl)
                  kstack_depth_to_print * STACK_DUMP_ENTRY_SIZE);
 
        printk("%sStack:\n", loglvl);
-       print_hex_dump(loglvl, " ", DUMP_PREFIX_NONE,
-                      STACK_DUMP_LINE_SIZE, STACK_DUMP_ENTRY_SIZE,
-                      sp, len, false);
+       while (off < len) {
+               u8 line[STACK_DUMP_LINE_SIZE];
+               size_t line_len = len - off > STACK_DUMP_LINE_SIZE ?
+                       STACK_DUMP_LINE_SIZE : len - off;
+
+               __memcpy(line, (u8 *)sp + off, line_len);
+               print_hex_dump(loglvl, " ", DUMP_PREFIX_NONE,
+                              STACK_DUMP_LINE_SIZE, STACK_DUMP_ENTRY_SIZE,
+                              line, line_len, false);
+               off += STACK_DUMP_LINE_SIZE;
+       }
        show_trace(task, sp, loglvl);
 }