{
  "finding_id": "DF-2635",
  "title": "iroot meta.inum overwritten from media after inum-hash insertion — hammer2_inode_drop walks off the wrong bucket (NULL deref panic at unmount) plus inode aliasing",
  "verdict": "reproduced",
  "impact": "panic",
  "reproduce": {
    "build": "python3 forge_2635.py h2base.img craft2635.img   (host; flips PFS-root meta.inum 1->0x42, CHECK_NONE ancestors, volhdr CRC32C recompute)",
    "run": "sh run.sh   (guest root: vnconfig; mount_hammer2 /dev/vn1@testvol /mnt/h2635; ls; write; sync; umount)",
    "expected": "mount/ls/write/sync succeed; umount panics: 'Fatal trap 12 ... fault virtual address = 0x0 ... Stopped at hammer2_inode_drop+0x1e3' (current process umount)"
  },
  "kernel_refs": [
    "sys/vfs/hammer2/hammer2_inode.c:592-656",
    "sys/vfs/hammer2/hammer2_inode.c:617",
    "sys/vfs/hammer2/hammer2_inode.c:624-625",
    "sys/vfs/hammer2/hammer2_inode.c:933",
    "sys/vfs/hammer2/hammer2_inode.c:954-977",
    "sys/vfs/hammer2/hammer2_vfsops.c:453-459",
    "sys/vfs/hammer2/hammer2_vfsops.c:1975",
    "sys/vfs/hammer2/hammer2_vfsops.c:707-711"
  ],
  "artifacts": [
    "forge_2635.py", "run.sh", "panic.txt", "run.log", "build.log",
    "env.txt", "fix.diff", "README.md", "VERDICT.md", "verdict.json",
    "fix_build.log", "fix_run.log", "manifest.json"
  ]
}
