{
  "finding_id": "DF-5812",
  "title": "swaponvp() rounds swap device size UP to the stripe boundary, publishing up to 63 pages of non-existent 'phantom' swap; OOB swap I/O past device EOF and unkillable pageout retry livelock under swap pressure",
  "verdict": "reproduced",
  "impact": "dos",
  "confidence": "certain",
  "reproduce": {
    "build": "cc -O2 -o /root/churn /root/churn.c",
    "run": "sh /root/run.sh   (200-page vn0 swap file + swapon + 4600MB anon churn)",
    "expected_unpatched": "vm.swap_size +192 pages on swapon; swapinfo claims 2048 512-blocks (1MB) for an 800KB file; during churn the console enters an infinite 'swap_pager: I/O error - pageout failed; offset 3444736 ... error 22' loop (interleave page 841 -> vn0 device page 201, first phantom page) and the guest wedges",
    "expected_patched": "vm.swap_size +128 pages; swapinfo 1536 512-blocks; churn completes; file size unchanged; swapoff succeeds"
  },
  "kernel_refs": [
    "sys/vm/vm_swap.c:365",
    "sys/vm/vm_swap.c:367",
    "sys/vm/vm_swap.c:377",
    "sys/vm/vm_swap.c:128",
    "sys/vm/swap_pager.c:537",
    "sys/vm/swap_pager.c:583",
    "sys/vm/swap_pager.c:1965"
  ],
  "artifacts": [
    "README.md", "VERDICT.md", "churn.c", "run.sh", "build.sh",
    "build.log", "run.log", "fix_run.log", "fix_build.log",
    "hang-serial-console.txt", "env.txt", "fix.diff",
    "kernel_build_first_attempt.log", "manifest.json", "verdict.json"
  ]
}
