From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753124AbdKIBL0 (ORCPT ); Wed, 8 Nov 2017 20:11:26 -0500 Received: from mail-io0-f193.google.com ([209.85.223.193]:43280 "EHLO mail-io0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752555AbdKIBLY (ORCPT ); Wed, 8 Nov 2017 20:11:24 -0500 X-Google-Smtp-Source: ABhQp+R0c+UqrVYOABnCy1dwrnag2+96s1LTbwdbh7B9TcGXqBeZhtixPt6L4bShLCm+E9KGmGIf/Kj9WMTgfhrFKtk= MIME-Version: 1.0 In-Reply-To: <20171108223020.24487-1-linux@rasmusvillemoes.dk> References: <20171108223020.24487-1-linux@rasmusvillemoes.dk> From: Kees Cook Date: Wed, 8 Nov 2017 17:11:23 -0800 X-Google-Sender-Auth: d8SiqckHCY0ppKYDTVfs9NreeIA Message-ID: Subject: Re: [RFC 0/6] some compile- and run-time format checking To: Rasmus Villemoes Cc: kernel-hardening@lists.openwall.com, LKML , Andrew Morton Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 8, 2017 at 2:30 PM, Rasmus Villemoes wrote: > Consider these strictly RFC/POC. > > I tried resurrecting my format_template plugin from two years ago, and > it rebased pretty cleanly. It also compiles with gcc 6.3, and has the > expected effect when one tries to trigger it, so it seems to work ok > (I think there was some build bot issue back then, maybe there still > is). > > The last four patches are something I threw together rather quickly. > They compile and the few test cases pass, but I obviously need to find > some places to actually use fmtcheck() to see if it's worth adding. > > Rasmus Villemoes (6): > plugins: implement format_template attribute > compiler.h: add __format_template Could you split these two off and send separately? This seems like a fine thing to get in now. Probably the second patch should be split up between adding __format_template, and additions of its usage. Do you have any good ways to find and extract all the dynamic format strings we need to mark? > compiler.h: add __attribute__((format_arg)) shorthand > lib/vsprintf.c: add fmtcheck utility > kernel.h: implement fmtmatch() wrapper around fmtcheck() > lib/test_printf.c: add a few fmtcheck() test cases I like this approach a lot. Combined with checking if a format string is in read-only memory, this could really close the door on format string exposures. Thanks! -Kees > > arch/Kconfig | 18 ++ > drivers/hwmon/applesmc.c | 2 +- > drivers/staging/speakup/spk_types.h | 2 +- > include/linux/compiler-gcc.h | 1 + > include/linux/compiler.h | 10 + > include/linux/kernel.h | 13 ++ > include/linux/smpboot.h | 2 +- > include/linux/usb.h | 2 +- > lib/test_printf.c | 41 ++++ > lib/vsprintf.c | 63 +++++ > scripts/Makefile.gcc-plugins | 2 + > scripts/gcc-plugins/format_template_plugin.c | 331 +++++++++++++++++++++++++++ > 12 files changed, 483 insertions(+), 4 deletions(-) > create mode 100644 scripts/gcc-plugins/format_template_plugin.c > > -- > 2.11.0 > -- Kees Cook Pixel Security