⬢ DragonFlyBSD Kernel Audit
DF-3095 / run.log
← back to finding ↓ download raw
DF-3095 runtime log (guest, stock INVARIANTS kernel #0 Jul 2, X86_64_GENERIC)
============================================================================
[run 1 - panic variant]
# cp base.img tid.img && ./tid_craft /root/tid.img panic && vnconfig -c vn0 tid.img
vol0_next_tid @ header offset 248 (sizeof header 1928)
vol0_next_tid BEFORE = 0000000100000000  (btree_root 8000000021000000)
vol0_next_tid AFTER  = ffffffffff000000 (panic variant)
# mount_hammer /dev/vn0 /mnt        <- SUCCEEDS
(serial) HAMMER(ua3095) mounted clean, no recovery needed
# echo hello > /mnt/x
(serial) panic: hammer_alloc_tid: Ran out of TIDs!
        hammer_alloc_tid() at hammer_alloc_tid+0xa7
        hammer_alloc_objid() at hammer_alloc_objid+0x246
        hammer_create_inode() at hammer_create_inode+0x365
        hammer_vop_ncreate() at hammer_vop_ncreate+0xa8
        vop_ncreate() at vop_ncreate+0x5b
        Debugger("panic") ... db>
(full console section in panic.txt)

[run 2 - wrap variant, fresh 4G stock base image]
# ./tid_craft /root/tid.img wrap
vol0_next_tid BEFORE = 0000000100000000  (btree_root 8000000021000000)
vol0_next_tid AFTER  = ffffffffffffffff (wrap variant)
# mount_hammer /dev/vn0 /mnt && echo hello > /mnt/x && sync
MOUNT_OK
WRITE_OK                       <- NO panic, NO error anywhere
# hammer history /mnt/x
/mnt/x	0000000000000066 clean {
    0000000000008010 06-Sep-2026 07:19:01      <- create_tid 0x8010 << TID base 0x100000000
}
# umount /mnt
UMOUNT_OK

[run 3 - wrap variant + snapshot isolation proof]
# fresh stock image; mount RW; echo AAA > /mnt/a; sync
# hammer synctid /mnt
0x0000000100008080                      <- T1 (only file 'a' exists)
# umount; ./tid_craft snap.img wrap; mount RW; echo BBB > /mnt/b; sync
# hammer history /mnt/b
/mnt/b	000000000000038d clean {
    0000000000008010 06-Sep-2026 07:20:04      <- post-wrap TID
}
# umount; mount_hammer -T 0x0000000100008080 /dev/vn0 /mnt   <- as-of T1 view
# ls -l /mnt
total 0
-rw-r--r--  1 root root  wheel  4 Sep  6 07:20 a
-rw-r--r--  1 root root  wheel  4 Sep  6 07:20 b       <- LEAKED: created AFTER T1
# cat /mnt/b
BBB
=> the T1 snapshot (taken when only 'a' existed) contains 'b':
   snapshot isolation broken by the wrapped create_tid.

[stress] both variants deterministic across runs (panic 1/1, wrap 1/1);
scaffolding iterations for TID parsing and the -T mount option were
tooling fixes, not reproduction variance.