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
12void 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(mod, 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((void *)info->sechdrs[i].sh_addr,
28				   info->sechdrs[i].sh_size, GFP_KERNEL);
29	}
30}
31