DragonFlyBSD Kernel Audit
DF-2765 / verdict.json
← back to finding ↓ download raw
{
 "finding_id": "DF-2765",
 "status": "reproduced",
 "reproduced": 1,
 "impact": "none",
 "confidence": "certain",
 "verdict": "journal_nrename journals both path leaves after the underlying op (vfs_jops.c:1322-1323), but cache_rename relinked fnch->ncp to the target name and destroyed tnch->ncp, so PATH1==PATH2==target and the source path never enters the stream (reproduced: 'jt/a/src.txt' count 0, target count 2). Journal replay/undo of renames is therefore impossible - silent replica divergence. Fix (capture PATH1 pre-op) validated on the patched kernel: source count 1, target count 1.",
 "exploit_chain": "",
 "evidence": [
  "decode_out.txt (PATH1@0x60='jt/b/dst.txt', PATH2|LAST@0x78='jt/b/dst.txt', source count 0)",
  "journal_stream.bin (192 B raw stream)",
  "run_fixed.log + journal_stream_fixed.bin (post-fix: source present)"
 ],
 "kernel_refs": [
  "sys/kern/vfs_jops.c:1322-1323",
  "sys/kern/vfs_cache.c:2118-2141",
  "sys/kern/vfs_default.c:1064"
 ],
 "poc_changes": "authored from scratch; reused the DF-2747-proven mountctl recipe",
 "attempts": 1,
 "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026 (baseline); fixed kernel #2 Mon Aug 31 23:12:27 UTC 2026",
 "runtime_sec": 60,
 "guest_dirty": 0,
 "build_cmd": "(none)",
 "run_cmd": "sh df2765_run.sh (root)",
 "code_hash": "f8555891c77525a341175b6399d2ac1692f76461cd9f0fd4b29ca11b834e4d49",
 "notes": "impact=none in the security sense: data-integrity bug of the (root-installed) journaling feature, not memory corruption",
 "recommended_fix": "snapshot the source ncp path before vop_journal_operate_ap in journal_nrename (fix.diff hunk 4)",
 "fix_status": "fixed",
 "fix_kernel_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #2: Mon Aug 31 23:12:27 UTC 2026",
 "fix_baseline_reproduced": 1,
 "fix_patched_reproduced": 0,
 "fix_verdict": "post-fix stream contains PATH1='jt/a/src.txt' (pre-op) and PATH2='jt/b/dst.txt'; baseline had source absent / target duplicated",
 "fix_evidence": [
  "run_fixed.log",
  "journal_stream_fixed.bin"
 ]
}