Re: [PATCH v2] use %pK for /proc/kallsyms and /proc/modules

From: Joe Perches
Date: Fri Feb 04 2011 - 17:34:35 EST


On Fri, 2011-02-04 at 14:21 -0800, Andrew Morton wrote:
> On Fri, 4 Feb 2011 14:09:44 -0800
> Kees Cook <kees.cook@xxxxxxxxxxxxx> wrote:
> > On Fri, Feb 04, 2011 at 02:03:51PM -0800, Andrew Morton wrote:
> > > kernel/kallsyms.c:481: warning: format '%p' expects type 'void *', but argument 3 has type 'long unsigned int'
> > > I'm struggling to see how this could have been compile-time or runtime
> > > tested?
> > I run-time tested it plenty. The thread contains the various discussions
> > about compile-time warnings, so I suspect in the last version, I didn't go
> > examine the warnings (since the origin of the other warnings went away).
> It's passing `unsigned long kallsym_iter.value' into vsprintf as a
> pointer. Won't vsprintf end up dereferenceing that unsigned long?

No it won't. %p and %pK output the pointer value.

> > I can send a patch to fix it up to cast everything to (void*) if you want?
> No typecasts, please. Get the types *correct* and they won't be needed.

There are many printk casts of longs to void *.

grep -rP --include=*.[ch] "\b(printk|pr_*[a-z]+).*\".*\(void \*\)" *

Typecast is the right way to fix this warning using %pK,
though there might be a different/better way altogether.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/