1 | // SPDX-License-Identifier: GPL-2.0-or-later |
---|---|
2 | /* |
3 | * Module kmemleak support |
4 | * |
5 | * Copyright (C) 2009 Catalin Marinas |
6 | */ |
7 | |
8 | #include <linux/module.h> |
9 | #include <linux/kmemleak.h> |
10 | #include "internal.h" |
11 | |
12 | void kmemleak_load_module(const struct module *mod, |
13 | const struct load_info *info) |
14 | { |
15 | unsigned int i; |
16 | |
17 | /* only scan the sections containing data */ |
18 | kmemleak_scan_area(ptr: mod, size: sizeof(struct module), GFP_KERNEL); |
19 | |
20 | for (i = 1; i < info->hdr->e_shnum; i++) { |
21 | /* Scan all writable sections that's not executable */ |
22 | if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) || |
23 | !(info->sechdrs[i].sh_flags & SHF_WRITE) || |
24 | (info->sechdrs[i].sh_flags & SHF_EXECINSTR)) |
25 | continue; |
26 | |
27 | kmemleak_scan_area(ptr: (void *)info->sechdrs[i].sh_addr, |
28 | size: info->sechdrs[i].sh_size, GFP_KERNEL); |
29 | } |
30 | } |
31 |