⬢ DragonFlyBSD Kernel Audit
DF-5012 / run.log
← back to finding ↓ download raw
+ 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