Re: [PATCH 2/3] printk: Add %ptc to safely print a task's comm

David Rientjes
2011-05-12T22:10:21Z

On Tue, 10 May 2011, John Stultz wrote:

> > > diff --git a/lib/vsprintf.c b/lib/vsprintf.c
> > > index bc0ac6b..b9c97b8 100644
> > > --- a/lib/vsprintf.c
> > > +++ b/lib/vsprintf.c
> > > @@ -797,6 +797,26 @@ char *uuid_string(char *buf, char *end, const u8 *addr,
> > > return string(buf, end, uuid, spec);
> > > }
> > >
> > > +static noinline_for_stack
> > > +char *task_comm_string(char *buf, char *end, u8 *addr,
> > > + struct printf_spec spec, const char *fmt)
> >
> > addr should be void * not u8 *
> >
> > > +{
> > > + struct task_struct *tsk = (struct task_struct *) addr;
> >
> > no cast.
> >
> > Maybe it'd be better to use current inside this routine and not
> > pass the pointer at all.
>
> That sounds reasonable. Most users are current, so forcing the more rare
> non-current users to copy it to a buffer first and use the normal %s
> would not be of much impact.
>

Please still require an argument, otherwise the oom killer (which could
potentially called right before a stack overflow) would be required to use
buffers for the commands printed in the tasklist dump.

> Although I'm not sure if there's precedent for a %p value that didn't
> take a argument. Thoughts on that? Anyone else have an opinion here?
>

After the cleanups are addressed:

Acked-by: David Rientjes <rientjes@google.com>

It would have been nice if we could force %ptc to expect a
struct task_struct * rather than a void *, however.