All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] Fix check for trace_percpu_buffer validity
@ 2021-12-23 10:34 Naveen N. Rao
  2021-12-23 10:34 ` [PATCH v2 1/2] trace: Fix check for trace_percpu_buffer validity in get_trace_buf() Naveen N. Rao
  2021-12-23 10:34 ` [PATCH v2 2/2] trace: Tag trace_percpu_buffer as a percpu pointer Naveen N. Rao
  0 siblings, 2 replies; 3+ messages in thread
From: Naveen N. Rao @ 2021-12-23 10:34 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, bristot, luto

The first patch fixes how we check for validity of trace_percpu_buffer, 
fixing a kernel oops seen on ppc64le with the new osnoise tracer. The 
second patch is new in v2 and carries the change to tag the pointer as a 
percpu pointer.

v1: 
http://lkml.kernel.org/r/20211221162529.1480652-1-naveen.n.rao@linux.vnet.ibm.com

- Naveen


Naveen N. Rao (2):
  trace: Fix check for trace_percpu_buffer validity in get_trace_buf()
  trace: Tag trace_percpu_buffer as a percpu pointer

 kernel/trace/trace.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)


base-commit: f7f0bb5eaecb1aff9cc8ab13425d43690b71ec44
-- 
2.34.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2 1/2] trace: Fix check for trace_percpu_buffer validity in get_trace_buf()
  2021-12-23 10:34 [PATCH v2 0/2] Fix check for trace_percpu_buffer validity Naveen N. Rao
@ 2021-12-23 10:34 ` Naveen N. Rao
  2021-12-23 10:34 ` [PATCH v2 2/2] trace: Tag trace_percpu_buffer as a percpu pointer Naveen N. Rao
  1 sibling, 0 replies; 3+ messages in thread
From: Naveen N. Rao @ 2021-12-23 10:34 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, bristot, luto

With the new osnoise tracer, we are seeing the below splat:
    Kernel attempted to read user page (c7d880000) - exploit attempt? (uid: 0)
    BUG: Unable to handle kernel data access on read at 0xc7d880000
    Faulting instruction address: 0xc0000000002ffa10
    Oops: Kernel access of bad area, sig: 11 [#1]
    LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA pSeries
    ...
    NIP [c0000000002ffa10] __trace_array_vprintk.part.0+0x70/0x2f0
    LR [c0000000002ff9fc] __trace_array_vprintk.part.0+0x5c/0x2f0
    Call Trace:
    [c0000008bdd73b80] [c0000000001c49cc] put_prev_task_fair+0x3c/0x60 (unreliable)
    [c0000008bdd73be0] [c000000000301430] trace_array_printk_buf+0x70/0x90
    [c0000008bdd73c00] [c0000000003178b0] trace_sched_switch_callback+0x250/0x290
    [c0000008bdd73c90] [c000000000e70d60] __schedule+0x410/0x710
    [c0000008bdd73d40] [c000000000e710c0] schedule+0x60/0x130
    [c0000008bdd73d70] [c000000000030614] interrupt_exit_user_prepare_main+0x264/0x270
    [c0000008bdd73de0] [c000000000030a70] syscall_exit_prepare+0x150/0x180
    [c0000008bdd73e10] [c00000000000c174] system_call_vectored_common+0xf4/0x278

osnoise tracer on ppc64le is triggering osnoise_taint() for negative
duration in get_int_safe_duration() called from
trace_sched_switch_callback()->thread_exit().

The problem though is that the check for a valid trace_percpu_buffer is
incorrect in get_trace_buf(). The check is being done after calculating
the pointer for the current cpu, rather than on the main percpu pointer.
Fix the check to be against trace_percpu_buffer.

Fixes: e2ace001176dc9 ("tracing: Choose static tp_printk buffer by explicit nesting count")
Cc: stable@vger.kernel.org
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 kernel/trace/trace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 88de94da596b13..e1f55851e53faa 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3217,7 +3217,7 @@ static char *get_trace_buf(void)
 {
 	struct trace_buffer_struct *buffer = this_cpu_ptr(trace_percpu_buffer);
 
-	if (!buffer || buffer->nesting >= 4)
+	if (!trace_percpu_buffer || buffer->nesting >= 4)
 		return NULL;
 
 	buffer->nesting++;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v2 2/2] trace: Tag trace_percpu_buffer as a percpu pointer
  2021-12-23 10:34 [PATCH v2 0/2] Fix check for trace_percpu_buffer validity Naveen N. Rao
  2021-12-23 10:34 ` [PATCH v2 1/2] trace: Fix check for trace_percpu_buffer validity in get_trace_buf() Naveen N. Rao
@ 2021-12-23 10:34 ` Naveen N. Rao
  1 sibling, 0 replies; 3+ messages in thread
From: Naveen N. Rao @ 2021-12-23 10:34 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: linux-kernel, bristot, luto

Tag trace_percpu_buffer as a percpu pointer to resolve warnings
reported by sparse:
  /linux/kernel/trace/trace.c:3218:46: warning: incorrect type in initializer (different address spaces)
  /linux/kernel/trace/trace.c:3218:46:    expected void const [noderef] __percpu *__vpp_verify
  /linux/kernel/trace/trace.c:3218:46:    got struct trace_buffer_struct *
  /linux/kernel/trace/trace.c:3234:9: warning: incorrect type in initializer (different address spaces)
  /linux/kernel/trace/trace.c:3234:9:    expected void const [noderef] __percpu *__vpp_verify
  /linux/kernel/trace/trace.c:3234:9:    got int *

Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
---
 kernel/trace/trace.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index e1f55851e53faa..78ea542ce3bc2e 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3207,7 +3207,7 @@ struct trace_buffer_struct {
 	char buffer[4][TRACE_BUF_SIZE];
 };
 
-static struct trace_buffer_struct *trace_percpu_buffer;
+static struct trace_buffer_struct __percpu *trace_percpu_buffer;
 
 /*
  * This allows for lockless recording.  If we're nested too deeply, then
@@ -3236,7 +3236,7 @@ static void put_trace_buf(void)
 
 static int alloc_percpu_trace_buffer(void)
 {
-	struct trace_buffer_struct *buffers;
+	struct trace_buffer_struct __percpu *buffers;
 
 	if (trace_percpu_buffer)
 		return 0;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-12-23 10:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-23 10:34 [PATCH v2 0/2] Fix check for trace_percpu_buffer validity Naveen N. Rao
2021-12-23 10:34 ` [PATCH v2 1/2] trace: Fix check for trace_percpu_buffer validity in get_trace_buf() Naveen N. Rao
2021-12-23 10:34 ` [PATCH v2 2/2] trace: Tag trace_percpu_buffer as a percpu pointer Naveen N. Rao

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.