tracing: fix leak in event_format_read()
authorTom Zanussi <tzanussi@gmail.com>
Tue, 17 Mar 2009 06:20:59 +0000 (01:20 -0500)
committerIngo Molnar <mingo@elte.hu>
Tue, 17 Mar 2009 07:38:23 +0000 (08:38 +0100)
Impact: fix memory leak

If event_format_read() exits early due to nonzero ppos, the
previous kmalloc doesn't get freed - might as well do the
check before the kmalloc and avoid the problem.

Signed-off-by: Tom Zanussi <tzanussi@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: =?ISO-8859-1?Q?Fr=E9d=E9ric?= Weisbecker <fweisbec@gmail.com>
LKML-Reference: <1237270859.8033.141.camel@charm-linux>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/trace/trace_events.c

index 238ea95a41159ddee14b8fa0fb3ae1f765147925..c88227b3b9dbe35aeb3bf136a9ecda1dabe4d861 100644 (file)
@@ -378,15 +378,15 @@ event_format_read(struct file *filp, char __user *ubuf, size_t cnt,
        char *buf;
        int r;
 
+       if (*ppos)
+               return 0;
+
        s = kmalloc(sizeof(*s), GFP_KERNEL);
        if (!s)
                return -ENOMEM;
 
        trace_seq_init(s);
 
-       if (*ppos)
-               return 0;
-
        /* If any of the first writes fail, so will the show_format. */
 
        trace_seq_printf(s, "name: %s\n", call->name);