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

check_and_purge_safe_mem livelocks forever when the head allocation fails _free_safe_mem's integrity checks β€” unbounded kernel loop + tbridge_printf spam turns any detected corruption into a hard hang

Summary

The purge loop's only exit is the head becoming NULL, but the free's three error paths return without unlinking - a corrupt head makes every iteration re-read the same node and spin forever printing SAFEMEM BUG lines (the corruption detector becomes the hang). Dead code in base (zero in-tree alloc/free/purge callers; root-gated module; trigger requires a prior DF-2156/2157/2158 manifestation). Return-int + skip-bad-node fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

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

Confirmed kernel references

Detail

Evidence (decisive lines)

static trace: safe_mem.c:171 loop vs :125-129/:132-137 early returns vs :145-150 unlink

Verified recommended fix

_free_safe_mem returns int; purge skips bad nodes

Verdict

untested (dead code in base: zero in-tree alloc/free/purge callers, root-gated module, trigger requires prior DF-2156/2157/2158 corruption)