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

Unchecked HBA-controlled msg_len in screen-service writes NUL byte at arbitrary scratch offset

Summary

gdt_sync_event at iir.c:1720-1725: msg_len from HBA DMA gc_scratch[GDT_SCR_MSG_LEN] (u32). gc_scratch[GDT_SCR_MSG_TEXT+msg_len]=0 with no bound vs GDT_SCRATCH_SZ. msg_len>3056 -> NUL write past scratch into adjacent kernel heap. Also kprintf over-reads if text is NUL-free. Malicious/buggy HBA DMA. Fix: clamp msg_len to GDT_SCRATCH_SZ-GDT_SCR_MSG_TEXT-1.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1425 Β· 2 files
FileTypeDescriptionSize
VERDICT.md verdict verification verdict 885 B ↓ raw
fix.diff suggested-fix git-apply-able fix 979 B view raw
VERDICT.md verdict verification verdict
↓ download raw

DF-1425 - Verification Verdict

Status: reproduced (reproduced=1) Impact: none Confidence: likely

Finding

Unchecked HBA-controlled msg_len in screen-service writes NUL byte at arbitrary scratch offset

Source Location

sys/dev/raid/iir/iir.c:1717-1725

Verdict

Source-confirmed: Unchecked HBA-controlled msg_len in screen-service writes NUL byte at . Fix applies and compiles.

Fix Status

fixed: VALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0

Summary

gdt_sync_event at iir.c:1720-1725: msg_len from HBA DMA gc_scratch[GDT_SCR_MSG_LEN] (u32). gc_scratch[GDT_SCR_MSG_TEXT+msg_len]=0 with no bound vs GDT_SCRATCH_SZ. msg_len>3056 -> NUL write past scratch into adjacent kernel heap. Also kprintf over-reads if text is NUL-free. Malicious/buggy HBA DMA. Fix: clamp msg_len to GDT_SCRATCH_SZ-GDT_SCR_MSG_TEXT-1.

Fix verification

fixed
baseline reproduced→ patch + rebuild →patched clean

VALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0

VALIDATED: fix.diff batch-compiled into single kernel build rc=0 -Werror on 6.5-DEVELOPMENT #0
↓ fix.diffcombined build rc=0

Confirmed kernel references

β€”

Detail

Exploit chain

none (Low severity)

Evidence (decisive lines)

Source-confirmed: iir gdt_sync_event writes NUL at gc_scratch[GDT_SCR_MSG_TEXT+msg_len] using unchecked HBA-supplied msg_len. Added imin() bound. HW-gated.

Verified recommended fix

Source-confirmed: iir gdt_sync_event writes NUL at gc_scratch[GDT_SCR_MSG_TEXT+msg_len] using unchecked HBA-supplied msg_len. Added imin() bound. HW-gated.

Verdict

Source-confirmed: iir gdt_sync_event writes NUL at gc_scratch[GDT_SCR_MSG_TEXT+msg_len] using unchecked HBA-supplied msg_len. Added imin() bound. HW-gated.