⬢ DragonFlyBSD Kernel Audit
DF-2329 / run.log
← back to finding ↓ download raw
DF-2329 lost-wakeup race (BUSAUDIT kernel #0 2026-10-21 11:04, guest root,
verbatim production ppbconf.c compiled into ppbharness3.ko:
  ppbconf.c SHA256 c853ab25f1362bc58a4718b2a8309f6be3e5f394d73125af82a313f41774c0f9
  ppb_1284.c SHA256 88eaa04ce517ff089956b29d3ece23b8fedad5b9aeb2ea2b74dfbe399680dae4
  ppb_base.c  SHA256 2a4c89abe2886da87269ddb8cab1021b670198c854f0c78d940a782f41492deb)
====================================================================
# sysctl hw.ppbx3.test=3   (race test: waiter pinned to cpu1 via lwkt_migratecpu)
# sleep 30
hw.ppbx3.racetrials: 16071
hw.ppbx3.lostwake: 1
hw.ppbx3.caught: 0

console (dmesg):
PPBX3: fakeppc0 attached, starting worker
PPBX3: harness worker start (production ppbconf.c verbatim)
ppbus0: <Parallel port bus> on ppc0
ppbus0: IEEE1284 device found /NIBBLE
ppb: <PnP> 30 characters: M(0x4d) F(0x46) G(0x47) :(0x3a) X(0x58) ;(0x3b) ... CLS:PRINTER;
ppbus0: <X Y/1> PRINTER              <- control attach: well-formed ID parses cleanly
hxc30: <ppbus child> on ppbus0.
hxc31: <ppbus child> on ppbus0.
PPBX3: DF-2329 lost-wakeup race: owner releases between requester
  crit_exit (ppbconf.c:467) and tsleep (:474); wakeup has no interlock -> lost
PPBX3: DF-2329 REPRODUCED at trial 16070 (delay 70 us): waiter STILL ASLEEP
  with PPB owner==NULL -- wakeup was lost; PPB_WAIT|PPB_NOINTR sleep is
  uninterruptible (kill-proof)
PPBX3: DF-2329 done: trials=16071 lostwake=1

(the rig revived the waiter with an artificial wakeup(ppb); in production
nothing ever would: the bus is FREE and the sleeper is in tsleep(ppb, 0
[no PCATCH]) -- unkillable, permanent)