Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'modules-for-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux

Pull module updates from Jessica Yu:
"Fix an age old bug involving jump_calls and static_labels when
CONFIG_MODULE_UNLOAD=n.

When CONFIG_MODULE_UNLOAD=n, it means you can't unload modules, so
normally the __exit sections of a module are not loaded at all.
However, dynamic code patching (jump_label, static_call, alternatives)
can have sites in __exit sections even if __exit is never executed.

Reported by Peter Zijlstra:
'Alternatives, jump_labels and static_call all can have relocations
into __exit code. Not loading it at all would be BAD.'

Therefore, load the __exit sections even when CONFIG_MODULE_UNLOAD=n,
and discard them after init"

* tag 'modules-for-v5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux:
module: treat exit sections the same as init sections when !CONFIG_MODULE_UNLOAD

+4 -5
+4 -5
kernel/module.c
··· 2807 2807 2808 2808 bool __weak module_init_section(const char *name) 2809 2809 { 2810 + #ifndef CONFIG_MODULE_UNLOAD 2811 + return strstarts(name, ".init") || module_exit_section(name); 2812 + #else 2810 2813 return strstarts(name, ".init"); 2814 + #endif 2811 2815 } 2812 2816 2813 2817 bool __weak module_exit_section(const char *name) ··· 3125 3121 */ 3126 3122 shdr->sh_addr = (size_t)info->hdr + shdr->sh_offset; 3127 3123 3128 - #ifndef CONFIG_MODULE_UNLOAD 3129 - /* Don't load .exit sections */ 3130 - if (module_exit_section(info->secstrings+shdr->sh_name)) 3131 - shdr->sh_flags &= ~(unsigned long)SHF_ALLOC; 3132 - #endif 3133 3124 } 3134 3125 3135 3126 /* Track but don't keep modinfo and version sections. */