forked from Minki/linux
31 lines
785 B
C
31 lines
785 B
C
|
// 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);
|
||
|
}
|
||
|
}
|