On Wed 2018-02-07 16:11:13, Geert Uytterhoeven wrote:
> Hi Petr,
> 
> On Wed, Feb 7, 2018 at 4:03 PM, Petr Mladek <pmla...@suse.com> wrote:
> > [*] I made some archaeology:
> >
> > The "(null)" string was added by the commit d97106ab53f812910
> > ("Make %p print '(null)' for NULL pointers").
> >
> > It was a generic solution to prevent eventual crashes, see
> > https://lkml.kernel.org/r/1230979341-23029-1-git-send-email-xy...@speakeasy.org
> >
> > From this point, printing 00000000 for %px looks perfectly fine because
> > it does not crash.
> >
> > In fact, it would have made perfect sense to print 00000000 for pure
> > %p because it did not crash. But nobody has cared about the eventual
> > confusion yet.
> >
> > I am not sure if it makes sense to change the pure %p handling
> > now. Note that printing "(null)" has the advantage that we
> > get this string instead of the hash ;-)
> 
> Note that "(null)" is also used for printing strings, where you do dereference
> the pointer, unlike for printing pointers.
> In addition, "(null)" for strings is not just printed for real NULL
> pointers, but
> also for anything pointing within the first page of virtual memory.

We are on the safe side. "(null)" for "%s" is handled
separately, see string() function in lib/vsprintf.c.

To make it clear. I was talking about "%p" format that is handled
in the pointer() function in lib/vsprintf.c. The "(null)" makes
sense only for the many modifiers that do deference of
the pointer, e.g. "%pa", "%pE", "%ph". It makes less sense
for the pure "%p" used without any modifier. Well, it actually
started to makes some sense after we started printing
the hash instead of the real pointer value.

Best Regards,
Petr

Reply via email to