diff options
author | Carsten Emde <C.Emde@osadl.org> | 2010-02-24 07:49:33 +0100 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-02-24 12:10:52 +0100 |
commit | 18efbf5b5a41937fa7dd3839a3a8a42fda538cf1 (patch) | |
tree | 54d84f6cc7f33c29a3b03458cd71be2e3cd499c4 | |
parent | d28b33f44b57ec171be735fd12511e6059672376 (diff) | |
download | lwn-18efbf5b5a41937fa7dd3839a3a8a42fda538cf1.tar.gz lwn-18efbf5b5a41937fa7dd3839a3a8a42fda538cf1.zip |
tracing: histogram: Remove large array from stack frame
Remove stack allocation of buffer space, use dyn memory instead.
Use a better assumption to estimate the required buffer space.
Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Carsten Emde <C.Emde@osadl.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r-- | kernel/trace/latency_hist.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/trace/latency_hist.c b/kernel/trace/latency_hist.c index 9f20d6136416..ce67060715e5 100644 --- a/kernel/trace/latency_hist.c +++ b/kernel/trace/latency_hist.c @@ -442,13 +442,19 @@ static ssize_t do_pid(struct file *file, const char __user *ubuf, static ssize_t show_maxlatproc(struct file *file, char __user *ubuf, size_t cnt, loff_t *ppos) { - char buf[1024]; int r; struct maxlatproc_data *mp = file->private_data; + int strmaxlen = TASK_COMM_LEN + 32; + char *buf = kmalloc(strmaxlen, GFP_KERNEL); - r = snprintf(buf, sizeof(buf), "%d %d %ld %s\n", + if (buf == NULL) + return -ENOMEM; + + r = snprintf(buf, strmaxlen, "%d %d %ld %s\n", mp->pid, MAX_RT_PRIO-1 - mp->prio, mp->latency, mp->comm); - return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); + r = simple_read_from_buffer(ubuf, cnt, ppos, buf, r); + kfree(buf); + return r; } #endif |