* [PATCH] x86: Don't discard .exit.text and .exit.data at link-time @ 2020-01-30 18:00 H.J. Lu 2020-01-30 19:40 ` Kees Cook 0 siblings, 1 reply; 7+ messages in thread From: H.J. Lu @ 2020-01-30 18:00 UTC (permalink / raw) To: linux-kernel Cc: Andy Lutomirski, Thomas Gleixner, Kees Cook, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, x86, Yu-cheng Yu Since .exit.text and .exit.data sections are discarded at runtime, we should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and .exit.data sections from default discarded sections. Signed-off-by: H.J. Lu <hjl.tools@gmail.com> --- arch/x86/kernel/vmlinux.lds.S | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index d1b942365d27..fb2c45cb1d1f 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -416,6 +416,12 @@ SECTIONS STABS_DEBUG DWARF_DEBUG + /* Sections to be discarded. EXIT_TEXT and EXIT_DATA discard at runtime. + * not link time. */ +#undef EXIT_TEXT +#define EXIT_TEXT +#undef EXIT_DATA +#define EXIT_DATA DISCARDS /DISCARD/ : { *(.eh_frame) -- 2.24.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] x86: Don't discard .exit.text and .exit.data at link-time 2020-01-30 18:00 [PATCH] x86: Don't discard .exit.text and .exit.data at link-time H.J. Lu @ 2020-01-30 19:40 ` Kees Cook 2020-01-30 19:45 ` H.J. Lu 0 siblings, 1 reply; 7+ messages in thread From: Kees Cook @ 2020-01-30 19:40 UTC (permalink / raw) To: H.J. Lu Cc: linux-kernel, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, x86, Yu-cheng Yu On Thu, Jan 30, 2020 at 10:00:48AM -0800, H.J. Lu wrote: > Since .exit.text and .exit.data sections are discarded at runtime, we > should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and > .exit.data sections from default discarded sections. This is just a correctness fix, yes? The EXIT_TEXT and EXIT_DATA were already included before the /DISCARD/ section here, so there's no behavioral change with this patch, correct? -Kees > > Signed-off-by: H.J. Lu <hjl.tools@gmail.com> > --- > arch/x86/kernel/vmlinux.lds.S | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S > index d1b942365d27..fb2c45cb1d1f 100644 > --- a/arch/x86/kernel/vmlinux.lds.S > +++ b/arch/x86/kernel/vmlinux.lds.S > @@ -416,6 +416,12 @@ SECTIONS > STABS_DEBUG > DWARF_DEBUG > > + /* Sections to be discarded. EXIT_TEXT and EXIT_DATA discard at runtime. > + * not link time. */ > +#undef EXIT_TEXT > +#define EXIT_TEXT > +#undef EXIT_DATA > +#define EXIT_DATA > DISCARDS > /DISCARD/ : { > *(.eh_frame) > -- > 2.24.1 > -- Kees Cook ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] x86: Don't discard .exit.text and .exit.data at link-time 2020-01-30 19:40 ` Kees Cook @ 2020-01-30 19:45 ` H.J. Lu 2020-01-30 19:58 ` Kees Cook 0 siblings, 1 reply; 7+ messages in thread From: H.J. Lu @ 2020-01-30 19:45 UTC (permalink / raw) To: Kees Cook Cc: LKML, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu On Thu, Jan 30, 2020 at 11:40 AM Kees Cook <keescook@chromium.org> wrote: > > On Thu, Jan 30, 2020 at 10:00:48AM -0800, H.J. Lu wrote: > > Since .exit.text and .exit.data sections are discarded at runtime, we > > should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and > > .exit.data sections from default discarded sections. > > This is just a correctness fix, yes? The EXIT_TEXT and EXIT_DATA were > already included before the /DISCARD/ section here, so there's no > behavioral change with this patch, correct? That is correct. I was confused by EXIT_TEXT and EXIT_DATA in generic DISCARDS. My patch just makes it more explicit. > -Kees > > > > > Signed-off-by: H.J. Lu <hjl.tools@gmail.com> > > --- > > arch/x86/kernel/vmlinux.lds.S | 6 ++++++ > > 1 file changed, 6 insertions(+) > > > > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S > > index d1b942365d27..fb2c45cb1d1f 100644 > > --- a/arch/x86/kernel/vmlinux.lds.S > > +++ b/arch/x86/kernel/vmlinux.lds.S > > @@ -416,6 +416,12 @@ SECTIONS > > STABS_DEBUG > > DWARF_DEBUG > > > > + /* Sections to be discarded. EXIT_TEXT and EXIT_DATA discard at runtime. > > + * not link time. */ > > +#undef EXIT_TEXT > > +#define EXIT_TEXT > > +#undef EXIT_DATA > > +#define EXIT_DATA > > DISCARDS > > /DISCARD/ : { > > *(.eh_frame) > > -- > > 2.24.1 > > > > -- > Kees Cook -- H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] x86: Don't discard .exit.text and .exit.data at link-time 2020-01-30 19:45 ` H.J. Lu @ 2020-01-30 19:58 ` Kees Cook 2020-01-30 20:06 ` H.J. Lu 0 siblings, 1 reply; 7+ messages in thread From: Kees Cook @ 2020-01-30 19:58 UTC (permalink / raw) To: H.J. Lu Cc: LKML, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu On Thu, Jan 30, 2020 at 11:45:15AM -0800, H.J. Lu wrote: > On Thu, Jan 30, 2020 at 11:40 AM Kees Cook <keescook@chromium.org> wrote: > > > > On Thu, Jan 30, 2020 at 10:00:48AM -0800, H.J. Lu wrote: > > > Since .exit.text and .exit.data sections are discarded at runtime, we > > > should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and > > > .exit.data sections from default discarded sections. > > > > This is just a correctness fix, yes? The EXIT_TEXT and EXIT_DATA were > > already included before the /DISCARD/ section here, so there's no > > behavioral change with this patch, correct? > > That is correct. I was confused by EXIT_TEXT and EXIT_DATA in generic > DISCARDS. My patch just makes it more explicit. Okay, so to that end and because this isn't arch-specific, I'd like to see this be a behavioral flag, and then the generic DISCARDS macro can be adjusted. This lets all architectures implement this without having to scatter undef/define lines in each arch. Something like this: diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index e00f41aa8ec4..f242d3b4814d 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -894,11 +894,17 @@ * section definitions so that such archs put those in earlier section * definitions. */ -#define DISCARDS \ - /DISCARD/ : { \ +#ifdef RUNTIME_DISCARD_EXIT +#define EXIT_DISCARDS +#else +#define EXIT_DISCARDS \ EXIT_TEXT \ EXIT_DATA \ - EXIT_CALL \ + EXIT_CALL +#endif +#define DISCARDS \ + /DISCARD/ : { \ + EXIT_DISCARDS \ *(.discard) \ *(.discard.*) \ *(.modinfo) \ Then x86 and all other architectures that do this can just use #define RUNTIME_DISCARD_EXIT at the top (like EMITS_PT_NOTE, etc). -Kees > > > --- a/arch/x86/kernel/vmlinux.lds.S > > > +++ b/arch/x86/kernel/vmlinux.lds.S > > > @@ -416,6 +416,12 @@ SECTIONS > > > STABS_DEBUG > > > DWARF_DEBUG > > > > > > + /* Sections to be discarded. EXIT_TEXT and EXIT_DATA discard at runtime. > > > + * not link time. */ > > > +#undef EXIT_TEXT > > > +#define EXIT_TEXT > > > +#undef EXIT_DATA > > > +#define EXIT_DATA > > > DISCARDS > > > /DISCARD/ : { > > > *(.eh_frame) -- Kees Cook ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] x86: Don't discard .exit.text and .exit.data at link-time 2020-01-30 19:58 ` Kees Cook @ 2020-01-30 20:06 ` H.J. Lu 2020-01-30 20:47 ` [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu 0 siblings, 1 reply; 7+ messages in thread From: H.J. Lu @ 2020-01-30 20:06 UTC (permalink / raw) To: Kees Cook Cc: LKML, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu On Thu, Jan 30, 2020 at 11:58 AM Kees Cook <keescook@chromium.org> wrote: > > On Thu, Jan 30, 2020 at 11:45:15AM -0800, H.J. Lu wrote: > > On Thu, Jan 30, 2020 at 11:40 AM Kees Cook <keescook@chromium.org> wrote: > > > > > > On Thu, Jan 30, 2020 at 10:00:48AM -0800, H.J. Lu wrote: > > > > Since .exit.text and .exit.data sections are discarded at runtime, we > > > > should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and > > > > .exit.data sections from default discarded sections. > > > > > > This is just a correctness fix, yes? The EXIT_TEXT and EXIT_DATA were > > > already included before the /DISCARD/ section here, so there's no > > > behavioral change with this patch, correct? > > > > That is correct. I was confused by EXIT_TEXT and EXIT_DATA in generic > > DISCARDS. My patch just makes it more explicit. > > Okay, so to that end and because this isn't arch-specific, I'd like to > see this be a behavioral flag, and then the generic DISCARDS macro can > be adjusted. This lets all architectures implement this without having > to scatter undef/define lines in each arch. > > Something like this: > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index e00f41aa8ec4..f242d3b4814d 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -894,11 +894,17 @@ > * section definitions so that such archs put those in earlier section > * definitions. > */ > -#define DISCARDS \ > - /DISCARD/ : { \ > +#ifdef RUNTIME_DISCARD_EXIT > +#define EXIT_DISCARDS > +#else > +#define EXIT_DISCARDS \ > EXIT_TEXT \ > EXIT_DATA \ > - EXIT_CALL \ > + EXIT_CALL > +#endif > +#define DISCARDS \ > + /DISCARD/ : { \ > + EXIT_DISCARDS \ > *(.discard) \ > *(.discard.*) \ > *(.modinfo) \ > > Then x86 and all other architectures that do this can just use > #define RUNTIME_DISCARD_EXIT > at the top (like EMITS_PT_NOTE, etc). > It should work. Thanks. -- H.J. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS 2020-01-30 20:06 ` H.J. Lu @ 2020-01-30 20:47 ` H.J. Lu 2020-01-30 22:04 ` Kees Cook 0 siblings, 1 reply; 7+ messages in thread From: H.J. Lu @ 2020-01-30 20:47 UTC (permalink / raw) To: Kees Cook Cc: LKML, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu [-- Attachment #1: Type: text/plain, Size: 2993 bytes --] On Thu, Jan 30, 2020 at 12:06 PM H.J. Lu <hjl.tools@gmail.com> wrote: > > On Thu, Jan 30, 2020 at 11:58 AM Kees Cook <keescook@chromium.org> wrote: > > > > On Thu, Jan 30, 2020 at 11:45:15AM -0800, H.J. Lu wrote: > > > On Thu, Jan 30, 2020 at 11:40 AM Kees Cook <keescook@chromium.org> wrote: > > > > > > > > On Thu, Jan 30, 2020 at 10:00:48AM -0800, H.J. Lu wrote: > > > > > Since .exit.text and .exit.data sections are discarded at runtime, we > > > > > should undefine EXIT_TEXT and EXIT_DATA to exclude .exit.text and > > > > > .exit.data sections from default discarded sections. > > > > > > > > This is just a correctness fix, yes? The EXIT_TEXT and EXIT_DATA were > > > > already included before the /DISCARD/ section here, so there's no > > > > behavioral change with this patch, correct? > > > > > > That is correct. I was confused by EXIT_TEXT and EXIT_DATA in generic > > > DISCARDS. My patch just makes it more explicit. > > > > Okay, so to that end and because this isn't arch-specific, I'd like to > > see this be a behavioral flag, and then the generic DISCARDS macro can > > be adjusted. This lets all architectures implement this without having > > to scatter undef/define lines in each arch. > > > > Something like this: > > > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > > index e00f41aa8ec4..f242d3b4814d 100644 > > --- a/include/asm-generic/vmlinux.lds.h > > +++ b/include/asm-generic/vmlinux.lds.h > > @@ -894,11 +894,17 @@ > > * section definitions so that such archs put those in earlier section > > * definitions. > > */ > > -#define DISCARDS \ > > - /DISCARD/ : { \ > > +#ifdef RUNTIME_DISCARD_EXIT > > +#define EXIT_DISCARDS > > +#else > > +#define EXIT_DISCARDS \ > > EXIT_TEXT \ > > EXIT_DATA \ > > - EXIT_CALL \ > > + EXIT_CALL > > +#endif We should keep EXIT_CALL in DISCARDS. Only .exit.text and .exit.data sections are discarded at runtime. > > +#define DISCARDS \ > > + /DISCARD/ : { \ > > + EXIT_DISCARDS \ > > *(.discard) \ > > *(.discard.*) \ > > *(.modinfo) \ > > > > Then x86 and all other architectures that do this can just use > > #define RUNTIME_DISCARD_EXIT > > at the top (like EMITS_PT_NOTE, etc). > > > > It should work. Here is the patch to add RUNTIME_DISCARD_EXIT to generic DISCARDS. -- H.J. [-- Attachment #2: 0001-Add-RUNTIME_DISCARD_EXIT-to-generic-DISCARDS.patch --] [-- Type: text/x-patch, Size: 1538 bytes --] From bde2821f5e01a5f49b227c6fb8ba6195c26381a9 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" <hjl.tools@gmail.com> Date: Thu, 30 Jan 2020 12:31:22 -0800 Subject: [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS In x86 kernel, .exit.text and .exit.data sections are discarded at runtime not by linker. Add RUNTIME_DISCARD_EXIT to generic DISCARDS and define it in x86 kernel linker script to keep them. --- arch/x86/kernel/vmlinux.lds.S | 1 + include/asm-generic/vmlinux.lds.h | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index e3296aa028fe..7206e1ac23dd 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S @@ -21,6 +21,7 @@ #define LOAD_OFFSET __START_KERNEL_map #endif +#define RUNTIME_DISCARD_EXIT #define EMITS_PT_NOTE #define RO_EXCEPTION_TABLE_ALIGN 16 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index e00f41aa8ec4..6b943fb8c5fd 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -894,10 +894,16 @@ * section definitions so that such archs put those in earlier section * definitions. */ +#ifdef RUNTIME_DISCARD_EXIT +#define EXIT_DISCARDS +#else +#define EXIT_DISCARDS \ + EXIT_TEXT \ + EXIT_DATA +#endif #define DISCARDS \ /DISCARD/ : { \ - EXIT_TEXT \ - EXIT_DATA \ + EXIT_DISCARDS \ EXIT_CALL \ *(.discard) \ *(.discard.*) \ -- 2.24.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS 2020-01-30 20:47 ` [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu @ 2020-01-30 22:04 ` Kees Cook 0 siblings, 0 replies; 7+ messages in thread From: Kees Cook @ 2020-01-30 22:04 UTC (permalink / raw) To: H.J. Lu Cc: LKML, Andy Lutomirski, Thomas Gleixner, Thomas Lendacky, Sami Tolvanen, Heiko Carstens, Ingo Molnar, Borislav Petkov, H . Peter Anvin, the arch/x86 maintainers, Yu-cheng Yu On Thu, Jan 30, 2020 at 12:47:07PM -0800, H.J. Lu wrote: > From bde2821f5e01a5f49b227c6fb8ba6195c26381a9 Mon Sep 17 00:00:00 2001 > From: "H.J. Lu" <hjl.tools@gmail.com> > Date: Thu, 30 Jan 2020 12:31:22 -0800 > Subject: [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS > > In x86 kernel, .exit.text and .exit.data sections are discarded at > runtime not by linker. Add RUNTIME_DISCARD_EXIT to generic DISCARDS > and define it in x86 kernel linker script to keep them. Thanks for doing this! :) (I wasn't sure about _CALL, thanks also for checking that.) (The patch is missing your SoB?) Reviewed-by: Kees Cook <keescook@chromium.org> -Kees > --- > arch/x86/kernel/vmlinux.lds.S | 1 + > include/asm-generic/vmlinux.lds.h | 10 ++++++++-- > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S > index e3296aa028fe..7206e1ac23dd 100644 > --- a/arch/x86/kernel/vmlinux.lds.S > +++ b/arch/x86/kernel/vmlinux.lds.S > @@ -21,6 +21,7 @@ > #define LOAD_OFFSET __START_KERNEL_map > #endif > > +#define RUNTIME_DISCARD_EXIT > #define EMITS_PT_NOTE > #define RO_EXCEPTION_TABLE_ALIGN 16 > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index e00f41aa8ec4..6b943fb8c5fd 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -894,10 +894,16 @@ > * section definitions so that such archs put those in earlier section > * definitions. > */ > +#ifdef RUNTIME_DISCARD_EXIT > +#define EXIT_DISCARDS > +#else > +#define EXIT_DISCARDS \ > + EXIT_TEXT \ > + EXIT_DATA > +#endif > #define DISCARDS \ > /DISCARD/ : { \ > - EXIT_TEXT \ > - EXIT_DATA \ > + EXIT_DISCARDS \ > EXIT_CALL \ > *(.discard) \ > *(.discard.*) \ > -- > 2.24.1 > -- Kees Cook ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-01-30 22:04 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-01-30 18:00 [PATCH] x86: Don't discard .exit.text and .exit.data at link-time H.J. Lu 2020-01-30 19:40 ` Kees Cook 2020-01-30 19:45 ` H.J. Lu 2020-01-30 19:58 ` Kees Cook 2020-01-30 20:06 ` H.J. Lu 2020-01-30 20:47 ` [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS H.J. Lu 2020-01-30 22:04 ` Kees Cook
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).