+ kldload /tmp/poc/df5012/df5012.ko + sleep 1 + ls -l /dev/df50120 /dev/df50120s4 /dev/df50120s4a /dev/df50120s4b /dev/df50120s4d crw-r----- 1 root operator 32, 0x1e110007 Sep 25 22:26 /dev/df50120 crw-r----- 1 root operator 32, 0x1e150007 Sep 25 22:26 /dev/df50120s4 crw-r----- 1 root operator 32, 0x00050000 Sep 25 22:26 /dev/df50120s4a crw-r----- 1 root operator 32, 0x00050001 Sep 25 22:26 /dev/df50120s4b crw-r----- 1 root operator 32, 0x00050003 Sep 25 22:26 /dev/df50120s4d + head -1 + ls /dev/df50120 /dev/df50120s4 /dev/df50120s4a /dev/df50120s4b /dev/df50120s4d + DEV=/dev/df50120 + echo 'DEV=/dev/df50120' DEV=/dev/df50120 + WPID=1109 + sleep 2 + /tmp/poc/df5012_trigger wedge /dev/df50120 == ps before kill == + echo '== ps before kill ==' + ps -o pid,stat,wchan,command -p 1109 PID STAT WCHAN COMMAND 1109 D3 physstr /tmp/poc/df5012_trigger wedge /dev/df50120 + kill -9 1109 + sleep 2 == ps after SIGKILL == + echo '== ps after SIGKILL ==' + ps -o pid,stat,wchan,command -p 1109 PID STAT WCHAN COMMAND 1109 D3 physstr /tmp/poc/df5012_trigger wedge /dev/df50120 == recovery poke == + echo '== recovery poke ==' + /tmp/poc/df5012_trigger poke /dev/df50120 poke: pread@1M r=512 errno=0 + sleep 2 == ps after poke == + echo '== ps after poke ==' + ps -o pid,stat,wchan,command -p 1109 PID STAT WCHAN COMMAND GONE + echo GONE + cat /tmp/poc/wedge.out == dmesg == + echo '== dmesg ==' + dmesg + tail -8 + grep df5012 df5012: raw disk "df50120" up; read @0x200000 => leak, @0x100000 => recovery poke df5012: LEAKING bio 0xfffff8004f3dfcc0 (off 2097152) -- b_error=EBUSY, return 0, NO biodone df5012: poke -- completing leaked bio 0xfffff8004f3dfcc0 == unload == + echo '== unload ==' + kldunload df5012 DONE + echo DONE