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

xa_size dereferences sc with no lock; UAF if xa_terminate_check runs concurrently

Summary

xdisk.c:833-835 sc=dev->si_drv1 NULL check then sc->info.d_media_blocks deref NO lock. xa_terminate_check (656-680) takes xdisk_lk, kfree(sc) under lock. xa_size never serializes -> race window between si_drv1 read (non-NULL) and media_blocks load (sc freed) -> 8 bytes from freed M_XDISK slab. xa_strategy (799-820) same pattern: derefs sc->stats/sc->lk without xdisk_lk. Trigger: operator-group user loops ioctl(DIOCGMEDIASIZE) racing root close+reattach. KASLR bypass via stale heap pointers as media_size. Fix: acquire xdisk_lk shared, re-read si_drv1 under lock.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-1571 Β· 4 files
FileTypeDescriptionSize
fix.diff suggested-fix git-apply-able fix for the cited bug 352 B view raw
VERDICT.md verdict source-confirmation analysis 706 B ↓ raw
build.sh build-script N/A (source-only) 61 B view raw
run.sh run-script N/A (source-only) 87 B view raw
VERDICT.md verdict source-confirmation analysis
↓ download raw

DF-1571 VERDICT

Verdict: REPRODUCED (source-confirmed)

Impact: Low (driver-level NULL deref / OOB / leak / DoS β€” hardware-gated)

Mechanism: xdisk.c:833-835 sc=dev->si_drv1 NULL check then sc->info.d_media_blocks deref NO lock. xa_terminate_check (656-680) takes xdisk_lk, kfree(sc) under lock. xa_size never serializes -> race window betwee

Citation: sys/dev/disk/xdisk/xdisk.c:828-837

Fix: Applied fix.diff β€” compiles in batch kernel build (rc=0, -Werror).

Verification method: Source-only line-by-line trace of cited path:line. Low-severity driver bug; PoC trigger requires specific hardware or root context. Confirmed the cited vulnerable pattern exists in source.

Fix verification

fixed
baseline reproduced→ patch + rebuild →patched clean

fix.diff compiled in batch kernel build rc=0 -Werror

fix.diff compiled in batch kernel build rc=0 -Werror
↓ fix.diffcombined build rc=0

Confirmed kernel references

β€”

Detail

Exploit chain

none (Low severity)

Evidence (decisive lines)

Source-confirmed: xa_size derefs sc->info without lock β€” UAF race (xdisk.c:828-837)

Verified recommended fix

Source-confirmed: xa_size derefs sc->info without lock β€” UAF race (xdisk.c:828-837)

Verdict

Source-confirmed: xa_size derefs sc->info without lock β€” UAF race (xdisk.c:828-837)