β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-5567

cb_dumpdata() has no PAGE_SIZE floor on di->maxiosize: a dump device reporting sub-page si_iosize_max makes chunk==0 and spins the panic-dump loop forever (no dump, silent hang)

Summary

max_iosize = min(MAXPHYS, di->maxiosize) is trusted verbatim from dev->si_iosize_max (subr_disk.c:934): a driver registering 512..4095 makes chunk = max_iosize/PAGE_SIZE == 0 while pgs > 0 - the while(pgs) loop issues zero-length dev_ddump forever (no dump, no error, no reset; only console CTRL-C breaks it). No in-tree dump device triggers it today (da/nvme/virtio/md/ahci/virtio_scsi/ips all PAGE_SIZE+). Panic-path forensics-loss hardening; root-config + future/third-party driver precondition. Runtime negative evidence: two guest FULL dumps byte-exact (savecore-validated, dumpscan p_offset chain contiguous incl. the segment DF-5535 drops); exact-fit crashdumpmap window proven. PAGE_SIZE-floor fix proposed for both dump paths.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-5567 Β· 1 files
FileTypeDescriptionSize
verdict.json file 1.2 KB view raw

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean
per-fix-DF-5567

Confirmed kernel references

Detail

Evidence (decisive lines)

static: dump_machdep.c:168,175-177 integer division without floor; runtime negative pack findings/poc/neg-evidence-dumpmachdep-pass2/

Verified recommended fix

max_iosize = MAX(PAGE_SIZE, min(MAXPHYS, di->maxiosize)) in both dump paths

Verdict

untested (Info hardening; needs a synthetic si_iosize_max=512 dump driver; code-level proof complete: chunk==0 -> pgs never advances)