Re: [PATCH V8 0/2] printk: hash addresses printed with %p
From: Tobin C. Harding
Date: Mon Oct 30 2017 - 18:33:56 EST
On Mon, Oct 30, 2017 at 03:03:21PM -0700, Kees Cook wrote:
> On Wed, Oct 25, 2017 at 7:53 PM, Tobin C. Harding <me@xxxxxxxx> wrote:
> > Here is the behaviour that this set implements.
> >
> > For kpt_restrict==0
> >
> > Randomness not ready:
> > printed with %p: (pointer) # NOTE: with padding
> > Valid pointer:
> > printed with %pK: deadbeefdeadbeef
> > printed with %p: 0xdeadbeef
> > malformed specifier (eg %i): 0xdeadbeef
>
> I really think we can't include SPECIAL unless _every_ callsite of %p
> is actually doing "0x%p", and then we're replacing all of those. We're
> not doing that, though...
>
> $ git grep '%p\b' | wc -l
> 12766
> $ git grep '0x%p\b' | wc -l
> 1837
>
> If we need some kind of special marking that this is a hashed
> variable, that should be something other than "0x". If we're using the
> existing "(null)" and new "(pointer)" text, maybe "(hash:xxxxxx)"
> should be used instead? Then the (rare) callers with 0x become
> "0x(hash:xxxx)" and naked callers produce "(hash:xxxx)".
>
> I think the first step for this is to just leave SPECIAL out.
Thanks Kees. V9 leaves SPECIAL out. Also V9 prints the whole 64 bit
address with the first 32 bits masked to zero. The intent being to _not_
change the output format from what it currently is. So it will look like
this;
00000000c09e81d0
What do you think?
Amusingly I think this whole conversation is going to come up again
when we do %pa, in inverse, since %pa currently does us SPECIAL.
thanks,
Tobin.