Skip to content

Commit 65c61de

Browse files
committed
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
2 parents c70a4be + 3312134 commit 65c61de

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

kernel/module.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2807,7 +2807,11 @@ void * __weak module_alloc(unsigned long size)
28072807

28082808
bool __weak module_init_section(const char *name)
28092809
{
2810+
#ifndef CONFIG_MODULE_UNLOAD
2811+
return strstarts(name, ".init") || module_exit_section(name);
2812+
#else
28102813
return strstarts(name, ".init");
2814+
#endif
28112815
}
28122816

28132817
bool __weak module_exit_section(const char *name)
@@ -3121,11 +3125,6 @@ static int rewrite_section_headers(struct load_info *info, int flags)
31213125
*/
31223126
shdr->sh_addr = (size_t)info->hdr + shdr->sh_offset;
31233127

3124-
#ifndef CONFIG_MODULE_UNLOAD
3125-
/* Don't load .exit sections */
3126-
if (module_exit_section(info->secstrings+shdr->sh_name))
3127-
shdr->sh_flags &= ~(unsigned long)SHF_ALLOC;
3128-
#endif
31293128
}
31303129

31313130
/* Track but don't keep modinfo and version sections. */

0 commit comments

Comments
 (0)