# Contributor handoff — torvalds/linux

> Canonical page: https://codevetter.com/unpack/linux/agent-handoff

# Contributor handoff — torvalds/linux

Scanned commit f0100363d8c374bd8e9ea7c9ba02744f0b802ca4 (2026-09-21). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

This is a review-driven C codebase with hard ABI boundaries (syscalls, UAPI headers, module interface) and strict process rules: coding-style.rst + checkpatch.pl for style, MAINTAINERS + get_maintainer.pl for ownership, submitting-patches.rst for the email workflow, and a dedicated coding-assistants.rst that forbids AI agents from adding Signed-off-by and prescribes an Assisted-by: LLM tag plus a reproducer-then-fix discipline. Safe first edits live in leaf drivers/ or new selftests; touching kernel/sched, mm, fs/namei or arch entry code requires reading the extensive lock-ordering and retry-protocol comments. Test with kunit.py and kselftest; build with make + Kconfig.
- Style and patch hygiene: follow Documentation/process/coding-style.rst, run scripts/checkpatch.pl on diffs, and locate reviewers via scripts/get_maintainer.pl against MAINTAINERS (M:/R:/L:/S:/F: entry format documented at the top of MAINTAINERS). — [Documentation/process/coding-style.rst](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Documentation/process/coding-style.rst) [scripts/checkpatch.pl](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/scripts/checkpatch.pl) [MAINTAINERS#L1-40](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/MAINTAINERS#L1-L40) [scripts/get_maintainer.pl](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/scripts/get_maintainer.pl)
- AI-specific contribution rules exist: Documentation/process/coding-assistants.rst states agents MUST NOT add Signed-off-by (only humans certify the DCO), contributions should carry an 'Assisted-by: LLM [tools]' tag, and bug fixes require reading full process docs plus a working reproducer before submitting. — [Documentation/process/coding-assistants.rst](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Documentation/process/coding-assistants.rst) [Documentation/process/generated-content.rst](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Documentation/process/generated-content.rst) [Documentation/process/submitting-patches.rst](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Documentation/process/submitting-patches.rst)
- Build from the top Makefile: 'make' runs recursive Kbuild (sub-Makefiles only touch their own dir), config via Kconfig ('make menuconfig'/'make defconfig'); per-dir objects are wired with obj-y/obj-$(CONFIG_*) lists as in init/Makefile. — [Makefile#L25-41](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Makefile#L25-L41) [init/Makefile#L7-20](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/init/Makefile#L7-L20) [Documentation/kbuild/kbuild.rst](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/Documentation/kbuild/kbuild.rst)
- Run tests with tools/testing/kunit/kunit.py (e.g. './tools/testing/kunit/kunit.py run' under UML/QEMU) for KUnit, and tools/testing/selftests via run_kselftest.sh/runner.sh; per-subsystem .kunitconfig fragments (init/.kunitconfig, rust/.kunitconfig) show minimal configs. — [tools/testing/kunit/kunit.py](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/tools/testing/kunit/kunit.py) [tools/testing/selftests/run_kselftest.sh](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/tools/testing/selftests/run_kselftest.sh) [init/.kunitconfig](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/init/.kunitconfig) [rust/.kunitconfig](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/rust/.kunitconfig)
- Read-first files for orientation: init/main.c (boot ordering and initcall protocol), the subsystem's Makefile+Kconfig, the relevant MAINTAINERS entry, and for syscall work arch/x86/entry/syscall_64.c + syscall_64.tbl. — [init/main.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/init/main.c) [MAINTAINERS](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/MAINTAINERS) [arch/x86/entry/syscall_64.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/arch/x86/entry/syscall_64.c)
- Trap — stable syscall ABI: never renumber or change entries in arch/x86/entry/syscalls/syscall_64.tbl or alter UAPI headers under include/uapi/ incompatibly; new syscalls append new numbers and new structs must be extensible like struct open_how (size-checked via copy_struct_from_user). — [arch/x86/entry/syscalls/syscall_64.tbl](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/arch/x86/entry/syscalls/syscall_64.tbl) [include/uapi/linux/bpf.h](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/include/uapi/linux/bpf.h) [fs/open.c#L1442-1456](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/fs/open.c#L1442-L1456)
- Trap — __init lifetime: functions/data marked __init are freed by free_initmem() after boot (SYSTEM_FREEING_INITMEM -> SYSTEM_RUNNING); calling them post-boot crashes, and mark_readonly() then enforces STRICT_KERNEL_RWX on kernel text/rodata. — [init/main.c#L1549-1583](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/init/main.c#L1549-L1583) [init/main.c#L1503-1547](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/init/main.c#L1503-L1547)
- Trap — namei retry protocol: path lookup restarts on -ECHILD (RCU->ref walk), -ESTALE (revalidation) and translates -EOPENSTALE; any code holding state across link_path_walk must handle restarts, and dcache lookups may run under RCU with no refcounting. — [fs/namei.c#L5010-5060](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/fs/namei.c#L5010-L5060) [fs/namei.c#L2801-2860](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/fs/namei.c#L2801-L2860) [fs/dcache.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/fs/dcache.c)
- Trap — scheduler locking: __schedule() holds rq->lock and documents exact memory-barrier pairings (smp_mb__after_spinlock vs signal wake-up paths); violating these or calling schedule() with preemption enabled corrupts task state. — [kernel/sched/core.c#L7073-7160](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/kernel/sched/core.c#L7073-L7160)
- Privilege checks precede security hooks: kernel code calls capable()/CAP_* first (e.g. may_init_module requires CAP_SYS_MODULE), then LSM hooks (security_*) run via call_int_hook — new code must wire both layers, not just one. — [kernel/module/main.c#L3223-3229](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/kernel/module/main.c#L3223-L3229) [security/security.c#L463-515](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/security/security.c#L463-L515) [kernel/cred.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/kernel/cred.c)
- Rust contributions must go through rust/kernel wrappers — the crate docs explicitly forbid bypassing it with raw C calls — and module glue is generated by rust/macros/module.rs; study samples/rust/rust_minimal.rs before writing drivers. — [rust/kernel/lib.rs#L1-15](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/rust/kernel/lib.rs#L1-L15) [rust/macros/module.rs](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/rust/macros/module.rs) [samples/rust/rust_minimal.rs](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/samples/rust/rust_minimal.rs)
- Safe edit boundaries: leaf drivers (drivers/*/*) and new tools/testing/selftests entries are low blast-radius; init/main.c, kernel/fork.c, kernel/sched/core.c, mm/memory.c, fs/namei.c and arch/*/entry/* are blast-radius hotspots where changes affect every task/syscall. (inferred) — [kernel/sched/core.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/kernel/sched/core.c) [mm/memory.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/mm/memory.c) [fs/namei.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/fs/namei.c) [drivers/base/dd.c](https://github.com/torvalds/linux/blob/f0100363d8c374bd8e9ea7c9ba02744f0b802ca4/drivers/base/dd.c)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
