mm/kasan/init.c
Source file repositories/reference/linux-study-clean/mm/kasan/init.c
File Facts
- System
- Linux kernel
- Corpus path
mm/kasan/init.c- Extension
.c- Size
- 11176 bytes
- Lines
- 497
- Domain
- Core OS
- Bucket
- Memory Management
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
Dependency Surface
linux/memblock.hlinux/init.hlinux/kasan.hlinux/kernel.hlinux/mm.hlinux/pfn.hlinux/slab.hlinux/pgalloc.hasm/page.hkasan.h
Detected Declarations
function kasan_p4d_tablefunction kasan_p4d_tablefunction kasan_pud_tablefunction kasan_pud_tablefunction kasan_pmd_tablefunction kasan_pmd_tablefunction kasan_pte_tablefunction kasan_early_shadow_page_entryfunction zero_pte_populatefunction zero_pmd_populatefunction zero_pud_populatefunction zero_p4d_populatefunction kasan_populate_early_shadowfunction kasan_free_ptefunction kasan_free_pmdfunction kasan_free_pudfunction kasan_free_p4dfunction kasan_remove_pte_tablefunction kasan_remove_pmd_tablefunction kasan_remove_pud_tablefunction kasan_remove_p4d_tablefunction kasan_remove_zero_shadowfunction kasan_add_zero_shadow
Annotated Snippet
if (IS_ALIGNED(addr, PMD_SIZE) && end - addr >= PMD_SIZE) {
pmd_populate_kernel(&init_mm, pmd,
lm_alias(kasan_early_shadow_pte));
continue;
}
if (pmd_none(*pmd)) {
pte_t *p;
if (slab_is_available())
p = pte_alloc_one_kernel(&init_mm);
else {
p = early_alloc(PAGE_SIZE, NUMA_NO_NODE);
kernel_pte_init(p);
}
if (!p)
return -ENOMEM;
pmd_populate_kernel(&init_mm, pmd, p);
}
zero_pte_populate(pmd, addr, next);
} while (pmd++, addr = next, addr != end);
return 0;
}
static int __ref zero_pud_populate(p4d_t *p4d, unsigned long addr,
unsigned long end)
{
pud_t *pud = pud_offset(p4d, addr);
unsigned long next;
do {
next = pud_addr_end(addr, end);
if (IS_ALIGNED(addr, PUD_SIZE) && end - addr >= PUD_SIZE) {
pmd_t *pmd;
pud_populate(&init_mm, pud,
lm_alias(kasan_early_shadow_pmd));
pmd = pmd_offset(pud, addr);
pmd_populate_kernel(&init_mm, pmd,
lm_alias(kasan_early_shadow_pte));
continue;
}
if (pud_none(*pud)) {
pmd_t *p;
if (slab_is_available()) {
p = pmd_alloc(&init_mm, pud, addr);
if (!p)
return -ENOMEM;
} else {
p = early_alloc(PAGE_SIZE, NUMA_NO_NODE);
pmd_init(p);
pud_populate(&init_mm, pud, p);
}
}
zero_pmd_populate(pud, addr, next);
} while (pud++, addr = next, addr != end);
return 0;
}
static int __ref zero_p4d_populate(pgd_t *pgd, unsigned long addr,
unsigned long end)
{
p4d_t *p4d = p4d_offset(pgd, addr);
unsigned long next;
do {
next = p4d_addr_end(addr, end);
if (IS_ALIGNED(addr, P4D_SIZE) && end - addr >= P4D_SIZE) {
pud_t *pud;
pmd_t *pmd;
p4d_populate_kernel(addr, p4d,
lm_alias(kasan_early_shadow_pud));
pud = pud_offset(p4d, addr);
pud_populate(&init_mm, pud,
lm_alias(kasan_early_shadow_pmd));
pmd = pmd_offset(pud, addr);
pmd_populate_kernel(&init_mm, pmd,
lm_alias(kasan_early_shadow_pte));
continue;
}
if (p4d_none(*p4d)) {
pud_t *p;
Annotation
- Immediate include surface: `linux/memblock.h`, `linux/init.h`, `linux/kasan.h`, `linux/kernel.h`, `linux/mm.h`, `linux/pfn.h`, `linux/slab.h`, `linux/pgalloc.h`.
- Detected declarations: `function kasan_p4d_table`, `function kasan_p4d_table`, `function kasan_pud_table`, `function kasan_pud_table`, `function kasan_pmd_table`, `function kasan_pmd_table`, `function kasan_pte_table`, `function kasan_early_shadow_page_entry`, `function zero_pte_populate`, `function zero_pmd_populate`.
- Atlas domain: Core OS / Memory Management.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.