⬢ DragonFlyBSD Kernel Audit
DF-5362 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-5362",
  "title": "CIS chain-graph cycles never terminate: pccard_scan_cis livelock (CPU burn, wedged socket thread, unreleased CIS window; unbounded leak amplifier)",
  "verdict": "reproduced",
  "reproduced": true,
  "impact": "dos",
  "method": "verbatim-rig: production parser sed-extracted byte-identical from guest /usr/src (sha256-gated), driven via pccard_read_cis() with crafted CIS on guard/canary buffers",
  "reproduce": {
    "build": "sh extract.sh . && cc -O2 -Wall -o rig rig_main.c",
    "run": "./rig livelock leakloop livelock_alarm",
    "expected": "BASELINE: livelock -> read budget 200000 exhausted with pccard_scan_cis NOT returned; the bus-read offset stream is periodic with period 12 reads (deterministic cycle); livelock_alarm -> SIGALRM kill after 2 s wall with ~630-695 MILLION bus reads executed and the scan still running (kernel-mode CPU burn analogue); leakloop -> +1 cfe per 22-read cycle, LIVE cfe=4545 at cap 100000 and 9090 at cap 200000 (exactly linear; kernel has no cap). WITH fix.diff (f5362): all three return normally after 65 link hops (budget 64), leakloop LIVE cfe=64 regardless of budget; matrix shows no other scenario changed; benign valid card (3 hops) unaffected."
  },
  "kernel_refs": [
    "sys/bus/pccard/pccard_cis.c:156",
    "sys/bus/pccard/pccard_cis.c:164",
    "sys/bus/pccard/pccard_cis.c:200",
    "sys/bus/pccard/pccard_cis.c:209",
    "sys/bus/pccard/pccard_cis.c:212",
    "sys/bus/pccard/pccard_cis.c:386",
    "sys/bus/pccard/pccard_cis.c:394",
    "sys/bus/pccard/pccard_cis.c:398",
    "sys/bus/pccard/pccard_cis.c:409",
    "sys/bus/pccard/pccard_cis.c:413",
    "sys/bus/pccard/pccard_cis.c:425",
    "sys/bus/pccard/pccard_cis.c:441",
    "sys/bus/pccard/pccard.c:195"
  ],
  "artifacts": [
    "README.md",
    "VERDICT.md",
    "extract.sh",
    "rig_shims.h",
    "rig_main.c",
    "run_matrix.sh",
    "build.sh",
    "run.sh",
    "build.log",
    "run.log",
    "fixed_run.log",
    "baseline_run.log",
    "matrix.log",
    "fix.diff",
    "extract_manifest.txt",
    "postboot_extract_manifest.txt",
    "postboot_run.log",
    "env.txt",
    "kernel_apply.log",
    "kernel_build.tail.log",
    "verdict.json",
    "manifest.json"
  ]
}