Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1333112 > unrolled thread

[v2 PATCH] trace, kasan: silence Kasan warning in check_stack

Started byYang Shi <yang.shi@linaro.org>
First post2016-02-12 22:10 +0100
Last post2016-02-19 18:40 +0100
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [v2 PATCH] trace, kasan: silence Kasan warning in check_stack Yang Shi <yang.shi@linaro.org> - 2016-02-12 22:10 +0100
    Re: [v2 PATCH] trace, kasan: silence Kasan warning in check_stack Steven Rostedt <rostedt@goodmis.org> - 2016-02-19 18:40 +0100

#1333112 — [v2 PATCH] trace, kasan: silence Kasan warning in check_stack

FromYang Shi <yang.shi@linaro.org>
Date2016-02-12 22:10 +0100
Subject[v2 PATCH] trace, kasan: silence Kasan warning in check_stack
Message-ID<r1t8v-3TO-43@gated-at.bofh.it>
When enabling stack trace via "echo 1 > /proc/sys/kernel/stack_tracer_enabled",
the below KASAN warning is triggered:

BUG: KASAN: stack-out-of-bounds in check_stack+0x344/0x848 at addr ffffffc0689ebab8
Read of size 8 by task ksoftirqd/4/29
page:ffffffbdc3a27ac0 count:0 mapcount:0 mapping:          (null) index:0x0
flags: 0x0()
page dumped because: kasan: bad access detected
CPU: 4 PID: 29 Comm: ksoftirqd/4 Not tainted 4.5.0-rc1 #129
Hardware name: Freescale Layerscape 2085a RDB Board (DT)
Call trace:
[<ffffffc000091300>] dump_backtrace+0x0/0x3a0
[<ffffffc0000916c4>] show_stack+0x24/0x30
[<ffffffc0009bbd78>] dump_stack+0xd8/0x168
[<ffffffc000420bb0>] kasan_report_error+0x6a0/0x920
[<ffffffc000421688>] kasan_report+0x70/0xb8
[<ffffffc00041f7f0>] __asan_load8+0x60/0x78
[<ffffffc0002e05c4>] check_stack+0x344/0x848
[<ffffffc0002e0c8c>] stack_trace_call+0x1c4/0x370
[<ffffffc0002af558>] ftrace_ops_no_ops+0x2c0/0x590
[<ffffffc00009f25c>] ftrace_graph_call+0x0/0x14
[<ffffffc0000881bc>] fpsimd_thread_switch+0x24/0x1e8
[<ffffffc000089864>] __switch_to+0x34/0x218
[<ffffffc0011e089c>] __schedule+0x3ac/0x15b8
[<ffffffc0011e1f6c>] schedule+0x5c/0x178
[<ffffffc0001632a8>] smpboot_thread_fn+0x350/0x960
[<ffffffc00015b518>] kthread+0x1d8/0x2b0
[<ffffffc0000874d0>] ret_from_fork+0x10/0x40
Memory state around the buggy address:
 ffffffc0689eb980: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 f4 f4 f4
 ffffffc0689eba00: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
>ffffffc0689eba80: 00 00 f1 f1 f1 f1 00 f4 f4 f4 f3 f3 f3 f3 00 00
                                        ^
 ffffffc0689ebb00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
 ffffffc0689ebb80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

The stacker tracer traverses the whole kernel stack when saving the max stack
trace. It may touch the stack red zones to cause the warning. So, just disable
the instrumentation to silence the warning.

Signed-off-by: Yang Shi <yang.shi@linaro.org>
---
v2:
 Add comment suggested by Steven

 kernel/trace/trace_stack.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 202df6c..2a1abba 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -156,7 +156,11 @@ check_stack(unsigned long ip, unsigned long *stack)
 		for (; p < top && i < stack_trace_max.nr_entries; p++) {
 			if (stack_dump_trace[i] == ULONG_MAX)
 				break;
-			if (*p == stack_dump_trace[i]) {
+			/*
+			 * The READ_ONCE_NOCHECK is used to let KASAN know that
+			 * this is not a stack-out-of-bounds error.
+			 */
+			if ((READ_ONCE_NOCHECK(*p)) == stack_dump_trace[i]) {
 				stack_dump_trace[x] = stack_dump_trace[i++];
 				this_size = stack_trace_index[x++] =
 					(top - p) * sizeof(unsigned long);
-- 
2.0.2

[toc] | [next] | [standalone]


#1338382

FromSteven Rostedt <rostedt@goodmis.org>
Date2016-02-19 18:40 +0100
Message-ID<r3Xc6-8z-29@gated-at.bofh.it>
In reply to#1333112
On Fri, 12 Feb 2016 12:46:00 -0800
Yang Shi <yang.shi@linaro.org> wrote:

> When enabling stack trace via "echo 1 > /proc/sys/kernel/stack_tracer_enabled",
> the below KASAN warning is triggered:
> 
> BUG: KASAN: stack-out-of-bounds in check_stack+0x344/0x848 at addr ffffffc0689ebab8
> Read of size 8 by task ksoftirqd/4/29
> page:ffffffbdc3a27ac0 count:0 mapcount:0 mapping:          (null) index:0x0
> flags: 0x0()
> page dumped because: kasan: bad access detected
> CPU: 4 PID: 29 Comm: ksoftirqd/4 Not tainted 4.5.0-rc1 #129
> Hardware name: Freescale Layerscape 2085a RDB Board (DT)
> Call trace:
> [<ffffffc000091300>] dump_backtrace+0x0/0x3a0
> [<ffffffc0000916c4>] show_stack+0x24/0x30
> [<ffffffc0009bbd78>] dump_stack+0xd8/0x168
> [<ffffffc000420bb0>] kasan_report_error+0x6a0/0x920
> [<ffffffc000421688>] kasan_report+0x70/0xb8
> [<ffffffc00041f7f0>] __asan_load8+0x60/0x78
> [<ffffffc0002e05c4>] check_stack+0x344/0x848
> [<ffffffc0002e0c8c>] stack_trace_call+0x1c4/0x370
> [<ffffffc0002af558>] ftrace_ops_no_ops+0x2c0/0x590
> [<ffffffc00009f25c>] ftrace_graph_call+0x0/0x14
> [<ffffffc0000881bc>] fpsimd_thread_switch+0x24/0x1e8
> [<ffffffc000089864>] __switch_to+0x34/0x218
> [<ffffffc0011e089c>] __schedule+0x3ac/0x15b8
> [<ffffffc0011e1f6c>] schedule+0x5c/0x178
> [<ffffffc0001632a8>] smpboot_thread_fn+0x350/0x960
> [<ffffffc00015b518>] kthread+0x1d8/0x2b0
> [<ffffffc0000874d0>] ret_from_fork+0x10/0x40
> Memory state around the buggy address:
>  ffffffc0689eb980: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 f4 f4 f4
>  ffffffc0689eba00: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
> >ffffffc0689eba80: 00 00 f1 f1 f1 f1 00 f4 f4 f4 f3 f3 f3 f3 00 00  
>                                         ^
>  ffffffc0689ebb00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>  ffffffc0689ebb80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> The stacker tracer traverses the whole kernel stack when saving the max stack
> trace. It may touch the stack red zones to cause the warning. So, just disable
> the instrumentation to silence the warning.
> 
> Signed-off-by: Yang Shi <yang.shi@linaro.org>

Applied, thanks!

-- Steve

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web