{
  "finding_id": "DF-0829",
  "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": "leak:65540",
  "confidence": "certain",
  "reproduce": {
    "build": "./build.sh",
    "run": "./run.sh",
    "expected": "kernel memory/pointer leak; see leak_sample.txt / run.log."
  },
  "kernel_refs": [
    "sys/vfs/hpfs/hpfs_vfsops.c:535",
    "sys/vfs/hpfs/hpfs_vnops.c:155",
    "sys/vfs/hpfs/hpfs_vnops.c:189",
    "sys/vfs/hpfs/hpfs_vnops.c:228",
    "sys/vfs/hpfs/hpfs_vnops.c:232",
    "sys/vfs/hpfs/hpfs_vnops.c:234",
    "sys/vfs/hpfs/hpfs.h:196",
    "sys/vfs/hpfs/hpfs.h:209",
    "sys/vfs/hpfs/hpfs.h:342",
    "sys/vfs/hpfs/hpfs.h:343"
  ],
  "artifacts": [
    {
      "path": "poc.c",
      "type": "trigger-source",
      "desc": "unprivileged open+HPFSIOCRDEA trigger; scans leak buffer for kernel pointers"
    },
    {
      "path": "hpfs_ioctl.h",
      "type": "trigger-source",
      "desc": "local copy of sys/vfs/hpfs/hpfs_ioctl.h for userland build"
    },
    {
      "path": "mk_hpfs.py",
      "type": "trigger-source",
      "desc": "crafts minimal-but-valid HPFS image with fn_ealen=0xFFFF and first EA ea_vallen=0xFFFE;honours kernel C struct alignment"
    },
    {
      "path": "evil.hpfs",
      "type": "trigger-asset",
      "desc": "crafted 100 KB HPFS image (output of mk_hpfs.py)"
    },
    {
      "path": "sz.c",
      "type": "trigger-source",
      "desc": "userspace mirror of struct fnode/sublock/spblock used to verify byte offsets"
    },
    {
      "path": "build.sh",
      "type": "build-script",
      "desc": "cc -Wall -O0 -o poc poc.c"
    },
    {
      "path": "run.sh",
      "type": "run-script",
      "desc": "mounts setup + ./poc /mnt/hpfs"
    },
    {
      "path": "VERDICT.md",
      "type": "verdict",
      "desc": "full narrative: mechanism, demo, impact, fix validation"
    },
    {
      "path": "fix.diff",
      "type": "suggested-fix",
      "desc": "git-apply-able: clamp fn_ealen at fnode load + HPFS_EA_FITS bounds check in all 3 EA ioctl loops"
    },
    {
      "path": "build.log",
      "type": "build-log",
      "desc": "captured inside run.log (=== BUILD_EXIT ===)"
    },
    {
      "path": "run.log",
      "type": "run-log",
      "desc": "decisive baseline run (kernel pointers leaked)"
    },
    {
      "path": "run.2.log",
      "type": "run-log",
      "desc": "fresh-mount run 2 (different h_vp)"
    },
    {
      "path": "run.3.log",
      "type": "run-log",
      "desc": "fresh-mount run 3 (different h_vp)"
    },
    {
      "path": "baseline_before.log",
      "type": "run-log",
      "desc": "phase-8 baseline run on unpatched #0 kernel"
    },
    {
      "path": "leak_sample.txt",
      "type": "leak-sample",
      "desc": "leaked h_vp value across 3 fresh-mount runs (proves real heap addresses)"
    },
    {
      "path": "fix_build.log",
      "type": "build-log",
      "desc": "full nativekernel build output for the single-fix kernel"
    },
    {
      "path": "fix_run.log",
      "type": "run-log",
      "desc": "PoC re-run on patched kernel: ENOENT, 0 kernel pointers"
    },
    {
      "path": "fix_kernel_uname.txt",
      "type": "environment",
      "desc": "kern.version of the single-fix kernel (#1)"
    },
    {
      "path": "env.txt",
      "type": "environment",
      "desc": "uname, vfs.usermount, kldstat"
    },
    {
      "path": "manifest.json",
      "type": "manifest",
      "desc": "this file"
    },
    {
      "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"
    }
  ]
}