DragonFlyBSD Kernel Audit
DF-0859 / manifest.json
← back to finding ↓ download raw
{
  "finding_id": "DF-0859",
  "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026     root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64",
  "code_hash": "b9a306d0f9e7f73e4c245b4cc038294a3be6c13dd327ab55b89b5a9764a94a47",
  "tested_at": "2026-07-22T18:10:00Z",
  "verdict": "REPRODUCED",
  "impact": "corruption",
  "confidence": "certain",
  "reproduce": {
    "build": "./build.sh",
    "run": "./run.sh",
    "expected": "bug manifests; see run.log / VERDICT.md. On a fixed kernel: no effect."
  },
  "kernel_refs": [
    "sys/vfs/hpfs/hpfs_alsubr.c:225",
    "sys/vfs/hpfs/hpfs_alsubr.c:229",
    "sys/vfs/hpfs/hpfs_alsubr.c:271",
    "sys/vfs/hpfs/hpfs_alsubr.c:314",
    "sys/vfs/hpfs/hpfs_alsubr.c:178",
    "sys/vfs/hpfs/hpfs_alsubr.c:346",
    "sys/vfs/hpfs/hpfs_alsubr.c:468",
    "sys/vfs/hpfs/hpfs_alsubr.c:479",
    "sys/vfs/hpfs/hpfs_alsubr.c:511",
    "sys/vfs/hpfs/hpfs_alsubr.c:382",
    "sys/vfs/hpfs/hpfs_vfsops.c:535",
    "sys/vfs/hpfs/hpfs.h:172",
    "sys/vfs/hpfs/hpfs.h:200",
    "sys/vfs/hpfs/hpfs.h:262",
    "sys/vfs/hpfs/hpfs.h:267"
  ],
  "artifacts": [
    {
      "path": "README.md",
      "type": "readme",
      "desc": "finding summary, build/run, expected vs fixed behaviour"
    },
    {
      "path": "VERDICT.md",
      "type": "verdict",
      "desc": "full narrative: mechanism (3 bcopys traced), trigger, why-no-panic, Phase-6 impact ceiling, fix validation"
    },
    {
      "path": "harness.c",
      "type": "trigger-source",
      "desc": "deterministic OOB-WRITE proof: faithful bcopy transcription of all 3 helpers + poisoned allocator + fixed-mode control"
    },
    {
      "path": "craft_img.py",
      "type": "trigger-source",
      "desc": "HPFS image crafter: forged fnode fn_ab with busycnt=255/freecnt=0/fn_size=0x10000"
    },
    {
      "path": "df859.img",
      "type": "trigger-source",
      "desc": "crafted 64 KB HPFS image with forged fn_ab (binary, for live mount test)"
    },
    {
      "path": "mount_rw.c",
      "type": "trigger-source",
      "desc": "30-line mount(2) helper to mount HPFS RW (works around mount_hpfs(8) forcing MNT_RDONLY)"
    },
    {
      "path": "build.sh",
      "type": "build-script",
      "desc": "exact cc command to build the harness"
    },
    {
      "path": "run.sh",
      "type": "run-script",
      "desc": "exact harness invocation"
    },
    {
      "path": "build.log",
      "type": "build-log",
      "desc": "full compiler output of the final successful harness build"
    },
    {
      "path": "run.log",
      "type": "run-log",
      "desc": "decisive harness run (full output) showing OOB extents + fix rejection"
    },
    {
      "path": "run.1.log",
      "type": "run-log",
      "desc": "stress-test run 1 of 3 (deterministic)"
    },
    {
      "path": "run.2.log",
      "type": "run-log",
      "desc": "stress-test run 2 of 3"
    },
    {
      "path": "run.3.log",
      "type": "run-log",
      "desc": "stress-test run 3 of 3"
    },
    {
      "path": "dmesg.txt",
      "type": "dmesg",
      "desc": "live guest dmesg on UNPATCHED module: hpfs_addextentr: INTERNAL INCONSISTENCE chain proving hpfs_alblk2alsec ran"
    },
    {
      "path": "panic.txt",
      "type": "panic-signature",
      "desc": "boot.log tail (no fatal trap \u2014 OOB write is silent on this run; see VERDICT.md 'Why no panic')"
    },
    {
      "path": "env.txt",
      "type": "environment",
      "desc": "uname, cc version, sysctls (vm.randomize_mmap=0, vfs.usermount=0)"
    },
    {
      "path": "fix.diff",
      "type": "suggested-fix",
      "desc": "git-apply-able fix: validate ab_busycnt against container max (HPFS_FN_MAX_LEAF=8/NODE=12, AS_MAX_LEAF=40/NODE=60) in splitalsec/concatalsec/alblk2alsec before the bcopys"
    },
    {
      "path": "fix_build.log",
      "type": "build-log",
      "desc": "full build output of the single-fix hpfs.ko module (Phase 8)"
    },
    {
      "path": "fix_run.log",
      "type": "run-log",
      "desc": "patched-module re-run of dd writes: 'forged ab_busycnt 255 > fnode max' on every attempt, INTERNAL INCONSISTENCE chain disappears"
    },
    {
      "path": "manifest.json",
      "type": "manifest",
      "desc": "this catalog"
    },
    {
      "path": "fix_apply.log",
      "type": "apply-log",
      "desc": "patch --dry-run output proving fix.diff applies cleanly on with-src"
    },
    {
      "path": "../fix_build_combined.log",
      "type": "build-log",
      "desc": "Combined 41-finding kernel build (rc=0, -Werror clean)"
    },
    {
      "path": "../fix_build_summary.txt",
      "type": "build-summary",
      "desc": "Summary of the combined 41-finding kernel build"
    }
  ]
}