tools/testing/selftests/proc/proc-pid-vm.c
Source file repositories/reference/linux-study-clean/tools/testing/selftests/proc/proc-pid-vm.c
File Facts
- System
- Linux kernel
- Corpus path
tools/testing/selftests/proc/proc-pid-vm.c- Extension
.c- Size
- 14159 bytes
- Lines
- 593
- Domain
- Support Tooling And Documentation
- Bucket
- tools
- Inferred role
- Support Tooling And Documentation: implementation source
- Status
- source implementation candidate
Why This File Exists
Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
assert.herrno.hsched.hsignal.hstdbool.hstdint.hstdio.hstring.hstdlib.hsys/mount.hsys/types.hsys/stat.hsys/wait.hfcntl.hunistd.hsys/syscall.hsys/uio.hlinux/kdev_t.hsys/time.hsys/resource.hlinux/fs.hkselftest.h
Detected Declarations
struct elf64_hdrstruct elf64_phdrfunction Copyrightfunction make_private_tmpfunction atefunction make_exefunction sigaction_SIGSEGVfunction vsyscallfunction mainfunction main
Annotated Snippet
struct elf64_hdr {
uint8_t e_ident[16];
uint16_t e_type;
uint16_t e_machine;
uint32_t e_version;
uint64_t e_entry;
uint64_t e_phoff;
uint64_t e_shoff;
uint32_t e_flags;
uint16_t e_ehsize;
uint16_t e_phentsize;
uint16_t e_phnum;
uint16_t e_shentsize;
uint16_t e_shnum;
uint16_t e_shstrndx;
};
struct elf64_phdr {
uint32_t p_type;
uint32_t p_flags;
uint64_t p_offset;
uint64_t p_vaddr;
uint64_t p_paddr;
uint64_t p_filesz;
uint64_t p_memsz;
uint64_t p_align;
};
#ifdef __x86_64__
#define PAGE_SIZE 4096
#define VADDR (1UL << 32)
#define MAPS_OFFSET 73
#define syscall 0x0f, 0x05
#define mov_rdi(x) \
0x48, 0xbf, \
(x)&0xff, ((x)>>8)&0xff, ((x)>>16)&0xff, ((x)>>24)&0xff, \
((x)>>32)&0xff, ((x)>>40)&0xff, ((x)>>48)&0xff, ((x)>>56)&0xff
#define mov_rsi(x) \
0x48, 0xbe, \
(x)&0xff, ((x)>>8)&0xff, ((x)>>16)&0xff, ((x)>>24)&0xff, \
((x)>>32)&0xff, ((x)>>40)&0xff, ((x)>>48)&0xff, ((x)>>56)&0xff
#define mov_eax(x) \
0xb8, (x)&0xff, ((x)>>8)&0xff, ((x)>>16)&0xff, ((x)>>24)&0xff
static const uint8_t payload[] = {
/* Casually unmap stack, vDSO and everything else. */
/* munmap */
mov_rdi(VADDR + 4096),
mov_rsi((1ULL << 47) - 4096 - VADDR - 4096),
mov_eax(11),
syscall,
/* Ping parent. */
/* write(0, &c, 1); */
0x31, 0xff, /* xor edi, edi */
0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, /* lea rsi, [rip] */
0xba, 0x01, 0x00, 0x00, 0x00, /* mov edx, 1 */
mov_eax(1),
syscall,
/* 1: pause(); */
mov_eax(34),
syscall,
0xeb, 0xf7, /* jmp 1b */
};
static int make_exe(const uint8_t *payload, size_t len)
{
struct elf64_hdr h;
struct elf64_phdr ph;
struct iovec iov[3] = {
{&h, sizeof(struct elf64_hdr)},
{&ph, sizeof(struct elf64_phdr)},
{(void *)payload, len},
};
int fd, fd1;
char buf[64];
memset(&h, 0, sizeof(h));
h.e_ident[0] = 0x7f;
h.e_ident[1] = 'E';
h.e_ident[2] = 'L';
h.e_ident[3] = 'F';
h.e_ident[4] = 2;
h.e_ident[5] = 1;
Annotation
- Immediate include surface: `assert.h`, `errno.h`, `sched.h`, `signal.h`, `stdbool.h`, `stdint.h`, `stdio.h`, `string.h`.
- Detected declarations: `struct elf64_hdr`, `struct elf64_phdr`, `function Copyright`, `function make_private_tmp`, `function ate`, `function make_exe`, `function sigaction_SIGSEGV`, `function vsyscall`, `function main`, `function main`.
- Atlas domain: Support Tooling And Documentation / tools.
- 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.