⬢ DragonFlyBSD Kernel Audit
DF-2420 / run.log
← back to finding ↓ download raw
# DF-2420 — run.log (verbatim ssh session outputs, 2026-10-15, stock kernel)
# guest: ahci0.0 DISK -> da0/pass0 (scbus2); ahci0.1 ATAPI -> cd0/pass1 (scbus3)

# ============ 1. live-hardware churn (negative control, tags=32/32) ============
$ for i in $(seq 1 32); do (dd if=/dev/da0 of=/dev/null bs=64k count=400 ...) & done; ...
32                                # all dd succeeded, guest healthy

$ sh /root/flood2.sh              # 48 concurrent FULL-disk reads (48x512MB,
                                  # ~30s sustained) + pass-CCB READ_10 storm
tail: 48 x "rc=0", "passstorm ccb count: N"
 1:33AM  up 7 mins ...            # no crash, no ahci errors in dmesg
#  -> with tags=32/32 (QEMU disk advertises ncqdepth == sc_ncmds) the probe
#     prune loop (ahci_cam.c:386-392) removes no slots, CAM devq (ncmds-1)
#     can never exhaust the 32-slot free list: the NULL path is NOT
#     reachable on this emulated hardware by pure I/O load.

# ============ 2. production-path trigger via free-list drain rig ============
$ sysctl dev.df2420rig="hold 0" >/dev/null; sleep 1; ./ahcipoc read10
df2420rig: port 0 drained - holding 31 ata_xfers, ap_ccb_free is now EMPTY
Fatal user address access from kernel mode from ahcipoc at ffffffff80305609
Fatal trap 12: page fault while in kernel mode
cpuid = 1; lapic id = 1
fault virtual address   = 0x60
fault code               = supervisor write data, page not present
instruction pointer      = 0x8:0xffffffff80305609
...
Stopped at      ahci_xpt_scsi_disk_io+0x8f9:    movl    $0x1,0x60(%r12)
db>
#  ^ xa = ahci_ata_get_xfer() returned NULL (ahci.c:3670); the READ_10 path
#  executes `xa->flags = ATA_F_READ` (ATA_F_READ==1, offset 0x60) on NULL.
#  r12 = NULL xa. Production function, real pass CCB, real driver state.

$ sysctl dev.df2420rig="hold 1" >/dev/null; sleep 1; ./ahcipoc -d /dev/pass1 atapi 00 00 00 00 00 00
df2420rig: port 1 drained - holding 31 ata_xfers, ap_ccb_free is now EMPTY
Fatal trap 12: page fault while in kernel mode
cpuid = 4; lapic id = 4
fault virtual address     = 0x0
fault code                 = supervisor read data, page not present
instruction pointer        = 0x8:0xffffffff80306816
...
Stopped at      ahci_xpt_action+0x2d6:   movq    (%rax),%rax
db>
#  ^ ahci_xpt_scsi_atapi_io inlined into ahci_xpt_action: xa==NULL deref at
#  `fis = xa->fis` / fis->flags = ... (read fault at 0x0).

# (full panic text: panic-disk.txt, panic-atapi.txt; rig: df2420_rig.c)