Re: [PATCH 5.4 v2 1/6] x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS

From: Tom Saeger
Date: Thu Feb 23 2023 - 14:10:03 EST


On Thu, Feb 23, 2023 at 10:50:22AM +0100, Greg Kroah-Hartman wrote:
> On Fri, Feb 10, 2023 at 01:20:22PM -0700, Tom Saeger wrote:
> > From: "H.J. Lu" <hjl.tools@xxxxxxxxx>
> >
> > commit 84d5f77fc2ee4e010c2c037750e32f06e55224b0 upstream.
> >
> > In the x86 kernel, .exit.text and .exit.data sections are discarded at
> > runtime, not by the linker. Add RUNTIME_DISCARD_EXIT to generic DISCARDS
> > and define it in the x86 kernel linker script to keep them.
> >
> > The sections are added before the DISCARD directive so document here
> > only the situation explicitly as this change doesn't have any effect on
> > the generated kernel. Also, other architectures like ARM64 will use it
> > too so generalize the approach with the RUNTIME_DISCARD_EXIT define.
> >
> > [ bp: Massage and extend commit message. ]
> >
> > Signed-off-by: H.J. Lu <hjl.tools@xxxxxxxxx>
> > Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> > Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx>
> > Link: https://lkml.kernel.org/r/20200326193021.255002-1-hjl.tools@xxxxxxxxx
> > Signed-off-by: Tom Saeger <tom.saeger@xxxxxxxxxx>
> > ---
> > arch/x86/kernel/vmlinux.lds.S | 1 +
> > include/asm-generic/vmlinux.lds.h | 11 +++++++++--
> > 2 files changed, 10 insertions(+), 2 deletions(-)
> >
> > diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
> > index 1afe211d7a7c..0ae3cd9a25ea 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
> > #include <asm-generic/vmlinux.lds.h>
> > #include <asm/asm-offsets.h>
> > #include <asm/thread_info.h>
>
> Does this backport look correct from a style point-of-view?

I debated about this.

>
> Hint, extra blank line needed after the define, like what is done in the
> original...

I did check, truly. See attached git-cherry-vimdiff

I show the blank line introduced here (which isn't in 5.4.y):
441110a547f8 ("vmlinux.lds.h: Provide EMIT_PT_NOTE to indicate export of .notes")

And wasn't sure whether to stay with the original or add a blank.
I chose the former.
I chose wrong.
Now I know.

Cheers,

--Tom

>
> thanks,
>
> greg k-h
#!/usr/bin/env bash
# Given a git hash ($1),
# use vimdiff to compare given commit to commit it was cherry-picked from.
#
# Author: Tom Saeger <tom.saeger@xxxxxxxxx>
# 6/21/2017

FIRST=${1:-$(tig-pick)}
SECOND=${2:-$(git show --format=email "${FIRST}" | sed -ne '/cherry picked/{s/.*commit \([0-9a-z]\+\).*/\1/;p;q;}')}

# if not "cherry picked" find first line with "commit"
if test -z "${SECOND}" ; then
SECOND=$(git show --format=email "${FIRST}" | sed -ne '/commit /{s/.*commit \([0-9a-z]\+\).*/\1/;p;q;}')
fi

if test -z "${SECOND}" ; then
exit 0;
fi
vim -d <(git show --format=email "${FIRST}") <(git show --format=email "${SECOND}")