From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joe Perches Subject: Re: [PATCH 2/3] vsprintf: print if symbol not found Date: Sun, 17 Dec 2017 16:04:14 -0800 Message-ID: <1513555454.31581.43.camel@perches.com> References: <1513554812-13014-1-git-send-email-me@tobin.cc> <1513554812-13014-3-git-send-email-me@tobin.cc> Mime-Version: 1.0 Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit Cc: Steven Rostedt , Tycho Andersen , Linus Torvalds , Kees Cook , Andrew Morton , Daniel Borkmann , Masahiro Yamada , Alexei Starovoitov , linux-kernel@vger.kernel.org, Network Development To: "Tobin C. Harding" , kernel-hardening@lists.openwall.com Return-path: In-Reply-To: <1513554812-13014-3-git-send-email-me@tobin.cc> Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On Mon, 2017-12-18 at 10:53 +1100, Tobin C. Harding wrote: > Depends on: commit bd6b239cdbb2 ("kallsyms: don't leak address when > symbol not found") > > Currently vsprintf for specifiers %p[SsB] relies on the behaviour of > kallsyms (sprint_symbol()) and prints the actual address if a symbol is > not found. Previous patch changes this behaviour so tha sprint_symbol() tha->that > returns an error if symbol not found. With this patch in place we can > print a sanitized message '' instead of leaking the address. > > Print '' for printk specifier %s[sSB] if no symbol is found. %s->%ps > diff --git a/include/linux/kernel.h b/include/linux/kernel.h [] > @@ -460,6 +460,8 @@ char *kvasprintf(gfp_t gfp, const char *fmt, va_list args); > extern __printf(2, 0) > const char *kvasprintf_const(gfp_t gfp, const char *fmt, va_list args); > > +extern int string_is_no_symbol(const char *s); > + [] > diff --git a/lib/vsprintf.c b/lib/vsprintf.c > > +#define PRINTK_NO_SYMBOL_STR "" "" ? "not found"? [] > +int string_is_no_symbol(const char *s) > +{ > + return !!strstr(s, PRINTK_NO_SYMBOL_STR); > +} > +EXPORT_SYMBOL(string_is_no_symbol); Why should string_is_no_symbol be exported?