All of lore.kernel.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Kees Cook <keescook@chromium.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Andy Lutomirski <luto@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Thomas Lendacky <Thomas.Lendacky@amd.com>,
	Sami Tolvanen <samitolvanen@google.com>,
	Heiko Carstens <heiko.carstens@de.ibm.com>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"H . Peter Anvin" <hpa@zytor.com>,
	"the arch/x86 maintainers" <x86@kernel.org>,
	Yu-cheng Yu <yu-cheng.yu@intel.com>
Subject: [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS
Date: Thu, 30 Jan 2020 12:47:07 -0800	[thread overview]
Message-ID: <CAMe9rOqYh3QEdT16C8TOCBhYqfzsYJ6re0x+MDjpad9_59krZw@mail.gmail.com> (raw)
In-Reply-To: <CAMe9rOp1SJvsjSMtDFi4HWKPpu2eePCDiedTPAndUEL5-HSU1w@mail.gmail.com>

[-- 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


  reply	other threads:[~2020-01-30 20:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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         ` H.J. Lu [this message]
2020-01-30 22:04           ` [PATCH] Add RUNTIME_DISCARD_EXIT to generic DISCARDS Kees Cook
2020-01-30 22:43 H.J. Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMe9rOqYh3QEdT16C8TOCBhYqfzsYJ6re0x+MDjpad9_59krZw@mail.gmail.com \
    --to=hjl.tools@gmail.com \
    --cc=Thomas.Lendacky@amd.com \
    --cc=bp@alien8.de \
    --cc=heiko.carstens@de.ibm.com \
    --cc=hpa@zytor.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=samitolvanen@google.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yu-cheng.yu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.