[PATCH] um: Prevent KASAN splats in dump_stack()

Vincent Whitchurch posted 1 patch 3 years, 7 months ago
arch/um/kernel/sysrq.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] um: Prevent KASAN splats in dump_stack()
Posted by Vincent Whitchurch 3 years, 7 months ago
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(-)

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
Re: [PATCH] um: Prevent KASAN splats in dump_stack()
Posted by Dmitry Vyukov 3 years, 7 months ago
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
>