]> www.infradead.org Git - nvme.git/commitdiff
module: Refine kmemleak scanned areas
authorVincent Donnefort <vdonnefort@google.com>
Tue, 10 Sep 2024 07:31:23 +0000 (08:31 +0100)
committerLuis Chamberlain <mcgrof@kernel.org>
Fri, 13 Sep 2024 16:55:17 +0000 (09:55 -0700)
commit ac3b43283923 ("module: replace module_layout with module_memory")
introduced a set of memory regions for the module layout sharing the
same attributes. However, it didn't update the kmemleak scanned areas
which intended to limit kmemleak scan to sections containing writable
data. This means sections such as .text and .rodata are scanned by
kmemleak.

Refine the scanned areas for modules by limiting it to MOD_TEXT and
MOD_INIT_TEXT mod_mem regions.

CC: Song Liu <song@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Vincent Donnefort <vdonnefort@google.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
kernel/module/debug_kmemleak.c

index 12a569d361e80498feec5e8344a9dc1f7d2309b3..b4cc03842d7037076d5bb9ef9e18c379b555b5d5 100644 (file)
 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);
+       /* only scan writable, non-executable sections */
+       for_each_mod_mem_type(type) {
+               if (type != MOD_DATA && type != MOD_INIT_DATA)
+                       kmemleak_no_scan(mod->mem[type].base);
        }
 }