DF-5396 / boot_rig.sh
#!/bin/sh # DF-5396 rig (v2): boot the DF guest CLEAN (uhci controller + reconnecting # chardev, NO usb-redir device yet). After ssh is up: # 1. guest: kldload if_urndis # 2. host: start usbredir_rndis.py (chardev reconnects while RUNNING -> # hello flows -> device_connect) # 3. monitor: device_add usb-redir -> urndis0 attaches # Steps 1-3 are done by attach_dev.sh. set -e cd "$(dirname "$0")/../../../dfbsd-qemu" # no server during boot (avoid QEMU's prelaunch write suppression deadlock) pkill -f '^python3 .*findings/poc/DF-5396/usbredir_rndis.py' 2>/dev/null || true rm -f rig.pid rig-ser.sock rig-mon.sock qemu-system-x86_64 \ -enable-kvm -m 4096 -smp 6 \ -drive file=disk.qcow2,if=virtio,format=qcow2 \ -device piix3-usb-uhci,id=uhci0 \ -chardev socket,id=cd0,host=127.0.0.1,port=45600,reconnect=1 \ -netdev user,id=n0,hostfwd=tcp:127.0.0.1:5522-:22 \ -device virtio-net-pci,netdev=n0 \ -display none -monitor unix:rig-mon.sock,server,nowait \ -serial unix:rig-ser.sock,server,nowait \ -daemonize -pidfile rig.pid \ 2>qemu-stderr.log || true echo "qemu pid $(cat rig.pid 2>/dev/null) -- waiting for ssh..." i=0 while [ $i -lt 120 ]; do if ssh -F config -o ConnectTimeout=4 -o BatchMode=yes dfbsd-maxx true >/dev/null 2>&1; then echo "guest up" exit 0 fi sleep 3; i=$((i+3)) done echo "TIMEOUT waiting for guest ssh" >&2 exit 1 |