⬢ DragonFlyBSD Kernel Audit
DF-5533 / run.patched.log
← back to finding ↓ download raw
# DF-5533 — fix validation on patched kernel (fix v2 = final diff in this pack)
# Patched kernel: DragonFly 6.5-DEVELOPMENT #1 Oct 7 01:28:37 UTC 2026
#
# === DF-5533 PATCHED (fix v2) cold-drain fire:
#  -> FIRE-RETURNED-RC0                    <-- sysctl kern.dfcold.fire=1 RETURNED
# WARNING: A USB process has been left suspended   <-- usb_process.c:437 finally reached
#     -1 B5     kpsusp   dfhz              <-- the usb_process thread, intentionally
#                                                parked suspended (documented semantics)
# (no D-state "suspkp" sysctl/drain thread remains; bus lock released)
#
# BASELINE (unpatched): the same sysctl sat in D1/suspkt forever, never
# returned, WARNING never printed, bus lock held by the wedged drain thread
# (see run.log).
#
# Fix-v1 note (captured for the record): the first fix revision parked the
# dispatcher in kproc_suspend_loop() while it still held the bus lock, which
# deadlocked drain's post-suspend lockmgr reacquire (dfhz B5/kpsusp holding
# the lock, sysctl D1 behind it). Fix v2 drops the lock around the park and
# is the final validated diff:
#    ps during v1 wedge:
#        -1 B5     kpsusp   dfhz
#      1027 D1     dfhz     sysctl
#
# Post-drain note: after a cold-path drain the usb_process thread is left
# parked (up_ptr != NULL), so a *second* usb_proc_drain()/usb_proc_free()
# on the same struct waits forever for thread exit — inherent to the
# "left suspended" semantics the WARNING documents; irrelevant at the
# boot-failure site (nobody re-drains). Harness kldunload after firing the
# cold test therefore wedges; the guest was reset after validation.