{
  "finding_id": "DF-2233",
  "title": "Lockless iconv list traversal vs concurrent module unload (UAF)",
  "verdict": "reproduced",
  "impact": "panic",
  "privesc_candidate": false,
  "kernel_refs": [
    "sys/libiconv/iconv.c:145",
    "sys/libiconv/iconv.c:150",
    "sys/libiconv/iconv.c:162",
    "sys/libiconv/iconv.c:167",
    "sys/libiconv/iconv.c:232",
    "sys/libiconv/iconv.c:243",
    "sys/libiconv/iconv.c:251",
    "sys/libiconv/iconv.c:418",
    "sys/libiconv/iconv.c:133",
    "sys/libiconv/iconv.c:218",
    "sys/libiconv/iconv.c:80",
    "sys/kern/subr_kobj.c:225",
    "sys/kern/kern_sysctl.c:1447"
  ],
  "reproduce": {
    "build": "sh build.sh (guest, root): bundles pristine /usr/src/sys/libiconv sources + race2233_harness.c into race2233.ko; cc -O churnadd.c",
    "run": "sh run.sh (guest, root): 4x churnadd walk 200000000 + loop { kldunload libiconv; kldload libiconv }",
    "expected": "Fatal trap 12 within 45 s: fault virtual address = 0x800, Stopped at iconv_lookupconv+0x30: movq 0x800(%rsi),%rdi (twice reproduced on independent boots; panic.txt / panic.2.txt)"
  },
  "artifacts": [
    "README.md", "VERDICT.md", "Makefile", "race2233_harness.c", "churnadd.c",
    "build.sh", "run.sh", "build.log", "run.log",
    "panic.txt", "panic.2.txt", "env.txt",
    "fix.diff", "fixvalidation.log",
    "manifest.json", "verdict.json"
  ]
}
