Message ID | 20220209170814.3268487-2-atomlin@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | module: core code clean up | expand |
Le 09/02/2022 à 18:08, Aaron Tomlin a écrit : > No functional change. > > This patch migrates kmemleak code out of core module > code into kernel/module/debug_kmemleak.c > > Signed-off-by: Aaron Tomlin <atomlin@redhat.com> > --- > kernel/module/Makefile | 1 + > kernel/module/debug_kmemleak.c | 30 ++++++++++++++++++++++++++++++ > kernel/module/internal.h | 7 +++++++ > kernel/module/main.c | 27 --------------------------- > 4 files changed, 38 insertions(+), 27 deletions(-) > create mode 100644 kernel/module/debug_kmemleak.c > > diff --git a/kernel/module/Makefile b/kernel/module/Makefile > index 8f2857d9ba1e..62c9fc91d411 100644 > --- a/kernel/module/Makefile > +++ b/kernel/module/Makefile > @@ -11,4 +11,5 @@ ifdef CONFIG_MODULES > obj-$(CONFIG_LIVEPATCH) += livepatch.o > obj-$(CONFIG_MODULES_TREE_LOOKUP) += tree_lookup.o > obj-$(CONFIG_STRICT_MODULE_RWX) += strict_rwx.o > +obj-$(CONFIG_DEBUG_KMEMLEAK) += debug_kmemleak.o > endif > diff --git a/kernel/module/debug_kmemleak.c b/kernel/module/debug_kmemleak.c > new file mode 100644 > index 000000000000..e896c2268011 > --- /dev/null > +++ b/kernel/module/debug_kmemleak.c > @@ -0,0 +1,30 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Module kmemleak support > + * > + * Copyright (C) 2009 Catalin Marinas > + */ > + > +#include <linux/module.h> > +#include <linux/kmemleak.h> > +#include "internal.h" > + > +void kmemleak_load_module(const struct module *mod, > + const struct load_info *info) CHECK: Alignment should match open parenthesis #48: FILE: kernel/module/debug_kmemleak.c:13: +void kmemleak_load_module(const struct module *mod, + const struct load_info *info) > +{ > + unsigned int i; > + > + /* only scan the sections containing data */ > + kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); > + > + for (i = 1; i < info->hdr->e_shnum; i++) { > + /* Scan all writable sections that's not executable */ > + if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) || > + !(info->sechdrs[i].sh_flags & SHF_WRITE) || > + (info->sechdrs[i].sh_flags & SHF_EXECINSTR)) > + continue; > + > + kmemleak_scan_area((void *)info->sechdrs[i].sh_addr, > + info->sechdrs[i].sh_size, GFP_KERNEL); > + } > +} > diff --git a/kernel/module/internal.h b/kernel/module/internal.h > index 6d5891cc8421..33d7befd0602 100644 > --- a/kernel/module/internal.h > +++ b/kernel/module/internal.h > @@ -171,3 +171,10 @@ static inline int module_sig_check(struct load_info *info, int flags) > return 0; > } > #endif /* !CONFIG_MODULE_SIG */ > + > +#ifdef CONFIG_DEBUG_KMEMLEAK > +void kmemleak_load_module(const struct module *mod, const struct load_info *info); > +#else /* !CONFIG_DEBUG_KMEMLEAK */ > +static inline void __maybe_unused kmemleak_load_module(const struct module *mod, > + const struct load_info *info) { } Remove __maybe_unused, not needed for a 'static inline' in the .h > +#endif /* CONFIG_DEBUG_KMEMLEAK */ > diff --git a/kernel/module/main.c b/kernel/module/main.c > index 403f2aacb3f6..c9931479e2eb 100644 > --- a/kernel/module/main.c > +++ b/kernel/module/main.c > @@ -2515,33 +2515,6 @@ bool __weak module_exit_section(const char *name) > return strstarts(name, ".exit"); > } > > -#ifdef CONFIG_DEBUG_KMEMLEAK > -static void kmemleak_load_module(const struct module *mod, > - const struct load_info *info) > -{ > - unsigned int i; > - > - /* only scan the sections containing data */ > - kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); > - > - for (i = 1; i < info->hdr->e_shnum; i++) { > - /* Scan all writable sections that's not executable */ > - if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) || > - !(info->sechdrs[i].sh_flags & SHF_WRITE) || > - (info->sechdrs[i].sh_flags & SHF_EXECINSTR)) > - continue; > - > - kmemleak_scan_area((void *)info->sechdrs[i].sh_addr, > - info->sechdrs[i].sh_size, GFP_KERNEL); > - } > -} > -#else > -static inline void kmemleak_load_module(const struct module *mod, > - const struct load_info *info) > -{ > -} > -#endif > - > static int validate_section_offset(struct load_info *info, Elf_Shdr *shdr) > { > #if defined(CONFIG_64BIT)
On Thu 2022-02-10 13:07 +0000, Christophe Leroy wrote: > CHECK: Alignment should match open parenthesis > #48: FILE: kernel/module/debug_kmemleak.c:13: > +void kmemleak_load_module(const struct module *mod, > + const struct load_info *info) Ok. > > +static inline void __maybe_unused kmemleak_load_module(const struct module *mod, > > + const struct load_info *info) { } > > Remove __maybe_unused, not needed for a 'static inline' in the .h Agreed. Thanks for your feedback Christophe. Kind regards,
diff --git a/kernel/module/Makefile b/kernel/module/Makefile index 8f2857d9ba1e..62c9fc91d411 100644 --- a/kernel/module/Makefile +++ b/kernel/module/Makefile @@ -11,4 +11,5 @@ ifdef CONFIG_MODULES obj-$(CONFIG_LIVEPATCH) += livepatch.o obj-$(CONFIG_MODULES_TREE_LOOKUP) += tree_lookup.o obj-$(CONFIG_STRICT_MODULE_RWX) += strict_rwx.o +obj-$(CONFIG_DEBUG_KMEMLEAK) += debug_kmemleak.o endif diff --git a/kernel/module/debug_kmemleak.c b/kernel/module/debug_kmemleak.c new file mode 100644 index 000000000000..e896c2268011 --- /dev/null +++ b/kernel/module/debug_kmemleak.c @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Module kmemleak support + * + * Copyright (C) 2009 Catalin Marinas + */ + +#include <linux/module.h> +#include <linux/kmemleak.h> +#include "internal.h" + +void kmemleak_load_module(const struct module *mod, + const struct load_info *info) +{ + unsigned int i; + + /* only scan the sections containing data */ + kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); + + for (i = 1; i < info->hdr->e_shnum; i++) { + /* Scan all writable sections that's not executable */ + if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) || + !(info->sechdrs[i].sh_flags & SHF_WRITE) || + (info->sechdrs[i].sh_flags & SHF_EXECINSTR)) + continue; + + kmemleak_scan_area((void *)info->sechdrs[i].sh_addr, + info->sechdrs[i].sh_size, GFP_KERNEL); + } +} diff --git a/kernel/module/internal.h b/kernel/module/internal.h index 6d5891cc8421..33d7befd0602 100644 --- a/kernel/module/internal.h +++ b/kernel/module/internal.h @@ -171,3 +171,10 @@ static inline int module_sig_check(struct load_info *info, int flags) return 0; } #endif /* !CONFIG_MODULE_SIG */ + +#ifdef CONFIG_DEBUG_KMEMLEAK +void kmemleak_load_module(const struct module *mod, const struct load_info *info); +#else /* !CONFIG_DEBUG_KMEMLEAK */ +static inline void __maybe_unused kmemleak_load_module(const struct module *mod, + const struct load_info *info) { } +#endif /* CONFIG_DEBUG_KMEMLEAK */ diff --git a/kernel/module/main.c b/kernel/module/main.c index 403f2aacb3f6..c9931479e2eb 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2515,33 +2515,6 @@ bool __weak module_exit_section(const char *name) return strstarts(name, ".exit"); } -#ifdef CONFIG_DEBUG_KMEMLEAK -static void kmemleak_load_module(const struct module *mod, - const struct load_info *info) -{ - unsigned int i; - - /* only scan the sections containing data */ - kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); - - for (i = 1; i < info->hdr->e_shnum; i++) { - /* Scan all writable sections that's not executable */ - if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) || - !(info->sechdrs[i].sh_flags & SHF_WRITE) || - (info->sechdrs[i].sh_flags & SHF_EXECINSTR)) - continue; - - kmemleak_scan_area((void *)info->sechdrs[i].sh_addr, - info->sechdrs[i].sh_size, GFP_KERNEL); - } -} -#else -static inline void kmemleak_load_module(const struct module *mod, - const struct load_info *info) -{ -} -#endif - static int validate_section_offset(struct load_info *info, Elf_Shdr *shdr) { #if defined(CONFIG_64BIT)
No functional change. This patch migrates kmemleak code out of core module code into kernel/module/debug_kmemleak.c Signed-off-by: Aaron Tomlin <atomlin@redhat.com> --- kernel/module/Makefile | 1 + kernel/module/debug_kmemleak.c | 30 ++++++++++++++++++++++++++++++ kernel/module/internal.h | 7 +++++++ kernel/module/main.c | 27 --------------------------- 4 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 kernel/module/debug_kmemleak.c