Messages in this thread | | | Date | Fri, 7 Nov 2008 03:48:24 +0300 | From | Alexey Dobriyan <> | Subject | Re: [patch] add /proc/pid/stack to dump task's stack trace |
| |
On Thu, Nov 06, 2008 at 04:30:23PM -0800, Ken Chen wrote: > On Thu, Nov 6, 2008 at 12:35 PM, Ingo Molnar <mingo@elte.hu> wrote: > >> +static int proc_pid_stack(struct task_struct *task, char *buffer) > >> +{ > >> + for (i = 0; i < trace.nr_entries; i++) { > >> + len += sprintf(buffer + len, "[<%p>] %pS\n", > >> + (void *)entries[i], (void > >> *)entries[i]); > > > > hm, this looks like a potential buffer overflow - isnt 'buffer' here > > only valid up to the next PAGE_SIZE boundary?
So, make trace depth low enough, or even better use seqfiles, if you're scared by buffer overflows.
> --- a/fs/proc/base.c > +++ b/fs/proc/base.c > @@ -130,6 +131,12 @@ struct pid_entry { > { .proc_show = &proc_##OTYPE } ) > > /* > + * buffer size used for proc read. See proc_info_read(). > + * 4K page size but our output routines use some slack for overruns > + */ > +#define PROC_BLOCK_SIZE (3*1024)
| |