DF-4671 / run.log
DF-4671 — consolidated decisive race-run record (see also race2..6, race11, race12 logs)
Final hardened protocol (see VERDICT.md for the two artifacts eliminated
on the way): single/dual grower threads doing kernel-verified strictly-
larger METEORSETGEO grows; 1-4 faulter threads faulting NEVER-faulted
page-index groups only (genuine first-fault d_mmap re-executions), with
kernel-truth generation counters (alloc_pages) and per-run nonces.
== race6.log-era run (fresh guest, W=8, 2 growers, 120 fresh groups x 6 runs)
[grow] 123 real grows, 0 failed; final alloc_pages=225 (etc. per run)
fault iterations: 164; final buffer alloc_pages=225; catches=0
(no dangling resolution caught)
== race11.log (fresh guest, INIT 512, W=64, 4 faulters over 8 cdevs, 300 grows x 4 runs)
uid=1001 euid=1001; nonce=...; 300 grows vs 120 fresh groups
[grow] 300 real grows, 0 failed; alloc_pages=556
== RESULT == catches=0 (x4 runs)
== race12.log (dual growers for kernel_map contention, 300 grows x 3 runs)
[grow] 210 real grows, 0 failed; alloc_pages=483
== RESULT == catches=0 (x3 runs)
== earlier artifact runs (documented, NOT evidence of the race):
- race2/race3: 464 "catches" DISQUALIFIED — two confounders proven:
(a) pager fake-page cache survives munmap (seqcheck: 64/64 stale
markers re-served with ZERO concurrency, no d_mmap query at all);
(b) SETGEO returns success without growing when the target is not
strictly larger (fixed by kernel-truth epoch counting).
- race4/race5: zero catches after (a)+(b) fixes; race5 aborted on
contigmalloc exhaustion (memory fragmentation from DF-4672 leakage).
== holdcheck (deterministic consequence, race-free; transcript):
holdcheck: RW mapping held; markers written
holdcheck: 10 grows; buffer now KVA=0xfffff80118b98000 pages=74 (the
mapped pages were kmem_free'd)
holdcheck RESULT: 64/64 mapped pages still show old markers; mapping
still WRITABLE (live RW alias onto orphaned kernel pages) after the
buffer was freed
== seqcheck (transcript; confounder proof):
seqcheck: markers written, mapping removed
seqcheck: 10 sequential grows; alloc_pages=74
seqcheck RESULT: 64/64 pages still show OLD markers => pager fake-page
cache SURVIVES munmap