Skip to content

Commit

Permalink
tracing: Do not (ab)use trace_seq in event_id_read()
Browse files Browse the repository at this point in the history
event_id_read() has no reason to kmalloc "struct trace_seq"
(more than PAGE_SIZE!), it can use a small buffer instead.

Note: "if (*ppos) return 0" looks strange and even wrong,
simple_read_from_buffer() handles ppos != 0 case corrrectly.

And it seems that almost every user of trace_seq in this file
should be converted too. Unless you use seq_open(), trace_seq
buys nothing compared to the raw buffer, but it needs a bit
more memory and code.

Link: http://lkml.kernel.org/r/20130718184712.GA4786@redhat.com

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
oleg-nesterov authored and rostedt committed Jul 19, 2013
1 parent 7710b63 commit cd458ba
Showing 1 changed file with 4 additions and 13 deletions.
17 changes: 4 additions & 13 deletions kernel/trace/trace_events.c
Expand Up @@ -947,23 +947,14 @@ static ssize_t
event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
{
struct ftrace_event_call *call = filp->private_data;
struct trace_seq *s;
int r;
char buf[32];
int len;

if (*ppos)
return 0;

s = kmalloc(sizeof(*s), GFP_KERNEL);
if (!s)
return -ENOMEM;

trace_seq_init(s);
trace_seq_printf(s, "%d\n", call->event.type);

r = simple_read_from_buffer(ubuf, cnt, ppos,
s->buffer, s->len);
kfree(s);
return r;
len = sprintf(buf, "%d\n", call->event.type);
return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
}

static ssize_t
Expand Down

0 comments on commit cd458ba

Please sign in to comment.