Message ID | 20200225051307.6401-2-keescook@chromium.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | binfmt_elf: Update READ_IMPLIES_EXEC logic for modern CPUs | expand |
Ozenn Mon, Feb 24, 2020 at 09:13:02PM -0800, Kees Cook wrote: > Add a table to document the current behavior of READ_IMPLIES_EXEC in > preparation for changing the behavior. > > Signed-off-by: Kees Cook <keescook@chromium.org> > Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> > --- > arch/x86/include/asm/elf.h | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h > index 69c0f892e310..733f69c2b053 100644 > --- a/arch/x86/include/asm/elf.h > +++ b/arch/x86/include/asm/elf.h > @@ -281,6 +281,25 @@ extern u32 elf_hwcap2; > /* > * An executable for which elf_read_implies_exec() returns TRUE will > * have the READ_IMPLIES_EXEC personality flag set automatically. > + * > + * The decision process for determining the results are: > + * > + * CPU: | lacks NX* | has NX, ia32 | has NX, x86_64 | > + * ELF: | | | | > + * -------------------------------|------------------|----------------| > + * missing GNU_STACK | exec-all | exec-all | exec-all | > + * GNU_STACK == RWX | exec-all | exec-all | exec-all | > + * GNU_STACK == RW | exec-none | exec-none | exec-none | In all those tables, you wanna do: s/GNU_STACK/PT_GNU_STACK/g so that it is clear what this define is. Thx.
On Wed, Mar 11, 2020 at 08:44:46PM +0100, Borislav Petkov wrote: > Ozenn Mon, Feb 24, 2020 at 09:13:02PM -0800, Kees Cook wrote: > > Add a table to document the current behavior of READ_IMPLIES_EXEC in > > preparation for changing the behavior. > > > > Signed-off-by: Kees Cook <keescook@chromium.org> > > Reviewed-by: Jason Gunthorpe <jgg@mellanox.com> > > --- > > arch/x86/include/asm/elf.h | 19 +++++++++++++++++++ > > 1 file changed, 19 insertions(+) > > > > diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h > > index 69c0f892e310..733f69c2b053 100644 > > --- a/arch/x86/include/asm/elf.h > > +++ b/arch/x86/include/asm/elf.h > > @@ -281,6 +281,25 @@ extern u32 elf_hwcap2; > > /* > > * An executable for which elf_read_implies_exec() returns TRUE will > > * have the READ_IMPLIES_EXEC personality flag set automatically. > > + * > > + * The decision process for determining the results are: > > + * > > + * CPU: | lacks NX* | has NX, ia32 | has NX, x86_64 | > > + * ELF: | | | | > > + * -------------------------------|------------------|----------------| > > + * missing GNU_STACK | exec-all | exec-all | exec-all | > > + * GNU_STACK == RWX | exec-all | exec-all | exec-all | > > + * GNU_STACK == RW | exec-none | exec-none | exec-none | > > In all those tables, you wanna do: > > s/GNU_STACK/PT_GNU_STACK/g > > so that it is clear what this define is. Fair enough. :) I think I was trying to save 3 characters from earlier tables that were wider. I'll send a v5. Thanks! -Kees
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h index 69c0f892e310..733f69c2b053 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h @@ -281,6 +281,25 @@ extern u32 elf_hwcap2; /* * An executable for which elf_read_implies_exec() returns TRUE will * have the READ_IMPLIES_EXEC personality flag set automatically. + * + * The decision process for determining the results are: + * + * CPU: | lacks NX* | has NX, ia32 | has NX, x86_64 | + * ELF: | | | | + * -------------------------------|------------------|----------------| + * missing GNU_STACK | exec-all | exec-all | exec-all | + * GNU_STACK == RWX | exec-all | exec-all | exec-all | + * GNU_STACK == RW | exec-none | exec-none | exec-none | + * + * exec-all : all PROT_READ user mappings are executable, except when + * backed by files on a noexec-filesystem. + * exec-none : only PROT_EXEC user mappings are executable. + * + * *this column has no architectural effect: NX markings are ignored by + * hardware, but may have behavioral effects when "wants X" collides with + * "cannot be X" constraints in memory permission flags, as in + * https://lkml.kernel.org/r/20190418055759.GA3155@mellanox.com + * */ #define elf_read_implies_exec(ex, executable_stack) \ (executable_stack != EXSTACK_DISABLE_X)