diff mbox series

um: Prevent KASAN splats in dump_stack()

Message ID 20220907100533.1719128-1-vincent.whitchurch@axis.com
State Accepted
Headers show
Series um: Prevent KASAN splats in dump_stack() | expand

Commit Message

Vincent Whitchurch Sept. 7, 2022, 10:05 a.m. UTC
Use READ_ONCE_NOCHECK() when reading the stack to prevent KASAN splats
when dump_stack() is used.

Fixes: 5b301409e8bc5d7fad ("UML: add support for KASAN under x86_64")
Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
---
 arch/um/kernel/sysrq.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Dmitry Vyukov Sept. 7, 2022, 10:29 a.m. UTC | #1
On Wed, 7 Sept 2022 at 12:05, Vincent Whitchurch
<vincent.whitchurch@axis.com> wrote:
>
> Use READ_ONCE_NOCHECK() when reading the stack to prevent KASAN splats
> when dump_stack() is used.
>
> Fixes: 5b301409e8bc5d7fad ("UML: add support for KASAN under x86_64")
> Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>

Reviewed-by: Dmitry Vyukov <dvyukov@google.com>

> ---
>  arch/um/kernel/sysrq.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/um/kernel/sysrq.c b/arch/um/kernel/sysrq.c
> index 7452f70d50d0..746715379f12 100644
> --- a/arch/um/kernel/sysrq.c
> +++ b/arch/um/kernel/sysrq.c
> @@ -48,7 +48,8 @@ void show_stack(struct task_struct *task, unsigned long *stack,
>                         break;
>                 if (i && ((i % STACKSLOTS_PER_LINE) == 0))
>                         pr_cont("\n");
> -               pr_cont(" %08lx", *stack++);
> +               pr_cont(" %08lx", READ_ONCE_NOCHECK(*stack));
> +               stack++;
>         }
>
>         printk("%sCall Trace:\n", loglvl);
> --
> 2.34.1
>
diff mbox series

Patch

diff --git a/arch/um/kernel/sysrq.c b/arch/um/kernel/sysrq.c
index 7452f70d50d0..746715379f12 100644
--- a/arch/um/kernel/sysrq.c
+++ b/arch/um/kernel/sysrq.c
@@ -48,7 +48,8 @@  void show_stack(struct task_struct *task, unsigned long *stack,
 			break;
 		if (i && ((i % STACKSLOTS_PER_LINE) == 0))
 			pr_cont("\n");
-		pr_cont(" %08lx", *stack++);
+		pr_cont(" %08lx", READ_ONCE_NOCHECK(*stack));
+		stack++;
 	}
 
 	printk("%sCall Trace:\n", loglvl);