linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).