Hi all, On Fri, 8 May 2020 18:05:24 +1000 Stephen Rothwell wrote: > > Today's linux-next merge of the livepatching tree got a conflict in: > > kernel/module.c > > between commits: > > db991af02f11 ("module: break nested ARCH_HAS_STRICT_MODULE_RWX and STRICT_MODULE_RWX #ifdefs") > 5c3a7db0c7ec ("module: Harden STRICT_MODULE_RWX") > > from the modules tree and commit: > > e6eff4376e28 ("module: Make module_enable_ro() static again") > > from the livepatching tree. > > diff --cc kernel/module.c > index c69291362676,a26343ea4d50..000000000000 > --- a/kernel/module.c > +++ b/kernel/module.c > @@@ -2055,29 -2023,20 +2042,30 @@@ static void module_enable_nx(const stru > frob_writable_data(&mod->init_layout, set_memory_nx); > } > > +static int module_enforce_rwx_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, > + char *secstrings, struct module *mod) > +{ > + const unsigned long shf_wx = SHF_WRITE|SHF_EXECINSTR; > + int i; > + > + for (i = 0; i < hdr->e_shnum; i++) { > + if ((sechdrs[i].sh_flags & shf_wx) == shf_wx) > + return -ENOEXEC; > + } > + > + return 0; > +} > + > #else /* !CONFIG_STRICT_MODULE_RWX */ > +/* module_{enable,disable}_ro() stubs are in module.h */ > static void module_enable_nx(const struct module *mod) { } > + static void module_enable_ro(const struct module *mod, bool after_init) {} > -#endif /* CONFIG_STRICT_MODULE_RWX */ > -static void module_enable_x(const struct module *mod) > +static int module_enforce_rwx_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, > + char *secstrings, struct module *mod) > { > - frob_text(&mod->core_layout, set_memory_x); > - frob_text(&mod->init_layout, set_memory_x); > + return 0; > } > -#else /* !CONFIG_ARCH_HAS_STRICT_MODULE_RWX */ > -static void module_enable_nx(const struct module *mod) { } > -static void module_enable_x(const struct module *mod) { } > -#endif /* CONFIG_ARCH_HAS_STRICT_MODULE_RWX */ > - > +#endif /* CONFIG_STRICT_MODULE_RWX */ > > #ifdef CONFIG_LIVEPATCH > /* This is now a conflict between the modules tree and Linus' tree. -- Cheers, Stephen Rothwell