Driver dies under TLS-1.3 bursts #3
Labels
No labels
bug
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
wontfix
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
gh-ps5-linux/ps5-linux-mwifiex#3
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hardware
1b4b:2b56(PCIE9097),card_type=0x207)PCIEIW620-17.130.3.p28Bug summary
Concurrent TLS-1.3 ClientHellos with the
X25519MLKEM768PQ key_share (≈1700 B ClientHello, fragmented across TCP segments) fill the FW command queue. Any periodic host-to-FW command issued during that window times out (10 s) and triggersMLAN_EVENT_ID_DRV_DBG_DUMP. The event handler inmoal_recv_event()always setspriv->phandle->driver_status = MTRUE("abnormal driver state"). All later cfg80211 ops are then blocked withBlock woal_cfg80211_* in abnormal driver stateuntil a successfulfw_reloadclears the flag — but neither of the FW reset paths the driver knows about (in-band reset, PCI FLR) reliably recovers.Reproducer
Prerequisites:
wifi.powersave=2; on Ubuntu: toggle it off in the network settings. With the defaultwifi.powersave=3(enabled), the driver dies within seconds of association, before any burst — separate kill path, must be ruled out first to study the burst-triggered one.Trigger:
Driver dies consistently in ~8–18 s on TLS variant, ~90–120 s on standard HTTPS, ~14 s on real-world Chromium 124+ (Rockstar Games launcher's PSN signin flow). Single-host bursts do not reproduce — concurrent sockets are required.
Failure fingerprint
Both TX and RX BD rings full at the same time is consistent across reproductions: FW has stopped processing the rings in both directions.
Cmds that timed out and triggered the trap (observed across runs)
0x00a4HostCmd_CMD_RSSI_INFOwoal_get_signal_infodump_station_info(NM periodic poll)0x000bHostCmd_CMD_802_11_GET_LOGwoal_get_stats_infodump_surveyand others0x0024HostCmd_CMD_802_11_DEAUTHENTICATEdeauthenticate(user-initiated)0x00a9HostCmd_CMD_FUNC_INITFW recovery paths (
auto_fw_reload/indrstcfg) — none of them reliably workauto_fw_reload=0rmmod + modprobealone does not clear it — the chip's scratch register still reports "FW running", the new driver instance printsWLAN FW already running! Skip FW download,Firmware Init Failed, probe returns-14, no iface comes up.auto_fw_reload=3(in-band)woal_reset_admalogsADMA reset failed (value:97).woal_pcie_reset_fwlogsFailed to poll FW reset register 1C94=0x98.PCIe In-band Reset Fail.auto_fw_reload=1(FLR viapci_reset_function)rmmod moal mlan && modprobe moal(no chip reset)WLAN FW already runningis logged, init returns -EFAULT, no iface.rmmod moal mlan && echo 1 > /sys/bus/pci/devices/0000:40:00.7/reset && modprobe moal(FLR)"WiFi Reset due to auth timeout cnt 5"trigger drops it back into abnormal state; (b)FUNC_INITcmd times out during init, driver doesn't register an iface at all.Host knobs and trigger variants tried
8 single-variable runs of the TLS burst against the baseline driver.
pcie_aspm=offon kernel cmdlineping -f -s 1700to gatewayps_mode=0 auto_ds=0(PS disabled)max_tx_buf=2048(half A-MSDU window)ring_size=32(smaller TX BD ring)pcie_int_mode=0(legacy IRQ)Time-to-die and the failure fingerprint are unaffected by every module-param knob tried, except ASPM-off which made it worse. The only trigger that does not kill the driver is a single-socket one-way flood; the bug needs concurrent sockets with two-way handshake activity.
Root cause
driver_status = MTRUEpermanently. The trap is doing real work — suppressing it deadlocks the kernel — but is the only thing that turns a brief FW hiccup into a permanently broken driver.0x1C94=0x98; FLR removes the device from the bus until reboot.Ruled out as cause (per the single-variable runs above)
ps_mode=0 auto_ds=0) — no effect on time-to-die under the burst. (NM-levelwifi.powersaveis a separate, much faster kill path — see Reproducer prerequisites.)Artifacts
iw620-bug-trigger.sh — reproducer that kills the driver and captures dmesg/journal/state.
iw620-bug-20260522-125911.tar.gz — capture bundle from
iw620-bug-trigger.shThanks for reporting it, I will be working on a solution
There is a newer version of the driver here that you could try:
https://github.com/nxp-imx/mwifiex/tree/hotfix/lf-6.18.2_1.0.0_hotfix
I don't know if it will help (I don't even own a PS5), but I thought it was worth pointing out.