> -----Original Message-----
> From: keesc...@google.com [mailto:keesc...@google.com] On Behalf Of Kees
> Cook
> Sent: Wednesday, October 4, 2017 9:43 AM
> To: Tobin C. Harding <m...@tobin.cc>
> Cc: Greg KH <gre...@linuxfoundation.org>; Petr Mladek <pmla...@suse.com>;
> Joe Perches <j...@perches.com>; Ian Campbell <i...@hellion.org.uk>; Sergey
> Senozhatsky <sergey.senozhat...@gmail.com>; kernel-
> harden...@lists.openwall.com; LKML <linux-kernel@vger.kernel.org>; Catalin
> Marinas <catalin.mari...@arm.com>; Will Deacon <will.dea...@arm.com>;
> Steven Rostedt <rost...@goodmis.org>; Roberts, William C
> <william.c.robe...@intel.com>; Chris Fries <cfr...@google.com>; Dave Weinstein
> <olo...@google.com>; Linus Torvalds <torva...@linux-foundation.org>
> Subject: Re: [kernel-hardening] [RFC V2 4/6] lib: vsprintf: default 
> kptr_restrict to
> the maximum value
> 
> On Sat, Sep 30, 2017 at 5:06 PM, Tobin C. Harding <m...@tobin.cc> wrote:
> > Set the initial value of kptr_restrict to the maximum setting rather
> > than the minimum setting, to ensure that early boot logging is not
> > leaking information.
> >
> > Signed-off-by: Tobin C. Harding <m...@tobin.cc>
> > ---
> >  lib/vsprintf.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 0271223..e009325
> > 100644
> > --- a/lib/vsprintf.c
> > +++ b/lib/vsprintf.c
> > @@ -396,7 +396,7 @@ struct printf_spec {  #define FIELD_WIDTH_MAX ((1
> > << 23) - 1)  #define PRECISION_MAX ((1 << 15) - 1)
> >
> > -int kptr_restrict __read_mostly;
> > +int kptr_restrict __read_mostly = 4; /* maximum setting */
> >
> >  /*
> >   * return non-zero if we should cleanse pointers for %p and %pK specifiers.
> 
> I share Linus's concern that making this the unconditional default will break 
> some
> people. The intention here (as stated in the
> changelog) is to cover anything leaked during early boot before sysctl 
> settings can
> change this value. That shouldn't break perf (which should happen after sysctl
> settings), but it _may_ break debugging of early boot. I would hope that 
> nothing
> would be needed there, but if we want to make this more configurable, we may
> want to consider a Kconfig for the default. Perhaps:
> 
> -int kptr_restrict __read_mostly;
> +int kptr_restrict __read_mostly = CONFIG_KPTR_RESTRICT_DEFAULT;
> 
> ...
> 
> +config KPTR_RESTRICT_DEFAULT
> + bool "Avoid leaking kernel pointers to userspace"
> + default 0
> + range 0 4
> + help
> +   This specifies the initial value of the kptr_restrict sysctl, which
> +   controls the level of kernel pointers removed from display
> +   to userspace. 0 = off, 1 = %pK not visible to non-root, 2 = %pK
> +   not visible for any user, 3 = %p also not visible, 4 = physical and
> +   resource addresses also not visible.
> 
> 
> I'd argue that a default of "1" would be a sensible starting place, but that 
> can be a
> separate patch, IMO.
> 

I might be crazy, as often the case, but a  command line option might be useful 
here
so you can boot the same kernel with Kptr < 4 if you really need to get at any 
information
hidden by a configure time value of 4.

> -Kees
> 
> --
> Kees Cook
> Pixel Security

Reply via email to