summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-01-25 15:11:53 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-01-25 15:11:53 -0500
commit74bf4076f2ed79b5510440b72a561823a8852ec0 (patch)
treed992d49f992cd77e20c9833876c021ad9b265f57 /kernel
parentf6760aa024199cfbce564311dc4bc4d47b6fb349 (diff)
downloadlinux-74bf4076f2ed79b5510440b72a561823a8852ec0.tar.gz
linux-74bf4076f2ed79b5510440b72a561823a8852ec0.tar.bz2
linux-74bf4076f2ed79b5510440b72a561823a8852ec0.zip
tracing: Prevent kernel oops with corrupted buffer
If the contents of the ftrace ring buffer gets corrupted and the trace file is read, it could create a kernel oops (usualy just killing the user task thread). This is caused by the checking of the pid in the buffer. If the pid is negative, it still references the cmdline cache array, which could point to an invalid address. The simple fix is to test for negative PIDs. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/trace/trace.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 0df1b0f2cb9e..eac6875cb990 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -951,6 +951,11 @@ void trace_find_cmdline(int pid, char comm[])
return;
}
+ if (WARN_ON_ONCE(pid < 0)) {
+ strcpy(comm, "<XXX>");
+ return;
+ }
+
if (pid > PID_MAX_DEFAULT) {
strcpy(comm, "<...>");
return;