⬢ DragonFlyBSD Kernel Audit
DF-4671 / run.log
← back to finding ↓ download raw
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