DragonFlyBSD Kernel Audit
DF-0812 / fix_run.log
← back to finding ↓ download raw
=== Phase 8: Fix Validation ===

--- BEFORE (unpatched kernel #0, baseline) ---
Image: HAMMER with 640 REDO records patched (redo_data_bytes=0x7FFFFFFF)
Mount result: FATAL TRAP 12 (page fault in memmove during REDO recovery)

boot.log excerpt (#0):
HAMMER(TEST) recovery check seqno=0010028e
HAMMER(TEST) recovery undo  300000000004b548-300000000004cf48 (6656 bytes)(RW)
HAMMER(TEST) Found REDO_SYNC 3000000000000000
HAMMER(TEST) recovery redo  300000000004b548-300000000004cf48 (6656 bytes)(RW)
HAMMER(TEST) Find extended redo  3000000000000000, 308552 extbytes
Fatal trap 12: page fault while in kernel mode
fault virtual address = 0xfffff8007657a000
fault code = supervisor read data, page not present
Stopped at memmove+0x10a: repe movsq (%rsi),%es:(%rdi)

--- AFTER (patched kernel #1, fix.diff applied) ---
Image: Same HAMMER image with same 640 REDO records patched (redo_data_bytes=0x7FFFFFFF)
Mount result: SUCCESS (MOUNT_EXIT=0, guest alive, no panic)

boot.log excerpt (#1):
HAMMER(TEST) recovery check seqno=0010028e
HAMMER(TEST) recovery undo  300000000004b548-300000000004cf48 (6656 bytes)(RW)
HAMMER(TEST) Found REDO_SYNC 3000000000000000
HAMMER(TEST) recovery redo  300000000004b548-300000000004cf48 (6656 bytes)(RW)
HAMMER(TEST) Find extended redo  3000000000000000, 308552 extbytes
HAMMER(TEST) recovery complete   <-- recovery completes without panic
MOUNT_EXIT=0                     <-- mount succeeds
GUEST ALIVE: Sun Jul  5 20:37:59 UTC 2026

The fix validates redo_data_bytes against the record capacity before vn_rdwr,
mirroring the UNDO path. Corrupt REDO records are now rejected with a
"Corrupt REDO record" message and the mount proceeds normally.

Patched kernel: DragonFly 6.5-DEVELOPMENT #1: Sun Jul  5 20:29:37 UTC 2026
SHA256 (/boot/kernel/kernel) = 2201a08916929ab3e9f4044a266825c16b55ae960423c0e17ec4600289274fc9