From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932402AbcEXRQO (ORCPT ); Tue, 24 May 2016 13:16:14 -0400 Received: from mail-wm0-f49.google.com ([74.125.82.49]:35378 "EHLO mail-wm0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751420AbcEXRQM (ORCPT ); Tue, 24 May 2016 13:16:12 -0400 MIME-Version: 1.0 In-Reply-To: <20160524001629.7a9f0c5ce8427d0ad5e951fd@gmail.com> References: <20160524001405.3e6abd1d5a63a871cc366cff@gmail.com> <20160524001629.7a9f0c5ce8427d0ad5e951fd@gmail.com> From: Kees Cook Date: Tue, 24 May 2016 10:16:09 -0700 X-Google-Sender-Auth: JGzPaHABQ_eQIjDY2CtmyzkhazU Message-ID: Subject: Re: [PATCH v1 2/3] Mark functions with the latent_entropy attribute To: Emese Revfy Cc: "kernel-hardening@lists.openwall.com" , PaX Team , Brad Spengler , Michal Marek , LKML , Masahiro Yamada , linux-kbuild , "Theodore Ts'o" , Andrew Morton , Linux-MM , Jens Axboe , Al Viro , Paul McKenney , Ingo Molnar , Thomas Gleixner , bart.vanassche@sandisk.com, "David S. Miller" 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 Mon, May 23, 2016 at 3:16 PM, Emese Revfy wrote: > These functions have been selected because they are init functions or > are called at random times or they have variable loops. > > Based on work created by the PaX Team. > > Signed-off-by: Emese Revfy > [...] > --- a/include/linux/compiler-gcc.h > +++ b/include/linux/compiler-gcc.h > @@ -188,6 +188,11 @@ > #endif /* GCC_VERSION >= 40300 */ > > #if GCC_VERSION >= 40500 > + > +#ifdef LATENT_ENTROPY_PLUGIN > +#define __latent_entropy __attribute__((latent_entropy)) > +#endif This deserves a full comment above it to describe its purpose and use for when people go trying to figure out what it is and where to use it. The commit message is a bit terse, so I'd try to expand both to describe what function characteristics a developer should look for to mark something with __latent_entropy. > + > /* > * Mark a position in code as unreachable. This can be used to > * suppress control flow warnings after asm blocks that transfer > [...] > diff --git a/include/linux/init.h b/include/linux/init.h > index aedb254..68df2c3 100644 > --- a/include/linux/init.h > +++ b/include/linux/init.h > @@ -37,9 +37,15 @@ > * section. > */ > > +#ifdef CONFIG_MEMORY_HOTPLUG > +#define add_meminit_latent_entropy > +#else > +#define add_meminit_latent_entropy __latent_entropy > +#endif > + > /* These are for everybody (although not all archs will actually > discard it in modules) */ > -#define __init __section(.init.text) __cold notrace > +#define __init __section(.init.text) __cold notrace __latent_entropy > #define __initdata __section(.init.data) > #define __initconst __constsection(.init.rodata) > #define __exitdata __section(.exit.data) > @@ -92,7 +98,7 @@ > #define __exit __section(.exit.text) __exitused __cold notrace > > /* Used for MEMORY_HOTPLUG */ > -#define __meminit __section(.meminit.text) __cold notrace > +#define __meminit __section(.meminit.text) __cold notrace add_meminit_latent_entropy > #define __meminitdata __section(.meminit.data) > #define __meminitconst __constsection(.meminit.rodata) > #define __memexit __section(.memexit.text) __exitused __cold notrace I was confused by these defines. :) Maybe "add_meminit_latent_entropy" should be named "__memory_hotplug_only_latent_entropy" or something like that? -Kees -- Kees Cook Chrome OS & Brillo Security