On Thu, Jan 30, 2020 at 12:06 PM H.J. Lu wrote: > > On Thu, Jan 30, 2020 at 11:58 AM Kees Cook 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 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.