diff options
| author | Takashi Iwai <tiwai@suse.de> | 2009-12-25 14:15:31 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-12-25 14:15:31 +0100 |
| commit | 52e04ea89da57274f0313d2bd73ba02f686cfdeb (patch) | |
| tree | 6ce5d086bcaea4cb534b3fcf6ba736eb48d582a4 /kernel/module.c | |
| parent | 41116e926cb92292fa4fcbe888ae8133fa0038e6 (diff) | |
| parent | 8b90ca08821fee79e181bfcbc3bbd41ef5637136 (diff) | |
Merge branch 'fix/misc' into topic/misc
Diffstat (limited to 'kernel/module.c')
| -rw-r--r-- | kernel/module.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/kernel/module.c b/kernel/module.c index a65dc787a27b..e96b8ed1cb6a 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -1910,9 +1910,7 @@ static void kmemleak_load_module(struct module *mod, Elf_Ehdr *hdr, unsigned int i; /* only scan the sections containing data */ - kmemleak_scan_area(mod->module_core, (unsigned long)mod - - (unsigned long)mod->module_core, - sizeof(struct module), GFP_KERNEL); + kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL); for (i = 1; i < hdr->e_shnum; i++) { if (!(sechdrs[i].sh_flags & SHF_ALLOC)) @@ -1921,8 +1919,7 @@ static void kmemleak_load_module(struct module *mod, Elf_Ehdr *hdr, && strncmp(secstrings + sechdrs[i].sh_name, ".bss", 4) != 0) continue; - kmemleak_scan_area(mod->module_core, sechdrs[i].sh_addr - - (unsigned long)mod->module_core, + kmemleak_scan_area((void *)sechdrs[i].sh_addr, sechdrs[i].sh_size, GFP_KERNEL); } } @@ -2250,6 +2247,12 @@ static noinline struct module *load_module(void __user *umod, "_ftrace_events", sizeof(*mod->trace_events), &mod->num_trace_events); + /* + * This section contains pointers to allocated objects in the trace + * code and not scanning it leads to false positives. + */ + kmemleak_scan_area(mod->trace_events, sizeof(*mod->trace_events) * + mod->num_trace_events, GFP_KERNEL); #endif #ifdef CONFIG_FTRACE_MCOUNT_RECORD /* sechdrs[0].sh_size is always zero */ |
