Two thirds of successful associations never complete the 4-way handshake, and ath10k says nothing
scope: device:google-taimen · severity: finding · confidence: proven · subsystem: radio
The question — is this device’s WiFi actually stable now that the ath10k key work has landed, and if not, what is still failing?
The answer — it is not stable, and the failure is silent. Pairing every
wlan0: associated against the WPA: Key negotiation completed that should
follow it, over one full day (boot of 2026-08-30):
associations: 92 followed by 4-way: 31 NOT followed by 4-way: 61what follows an unpaired association: deauth 24 · another assoc 20 · reason=4 17median seconds to that next event: 7.6Two thirds of successful 802.11 associations never get keys. They are abandoned about 7.6 s later and retried, which is why the symptom is reported as “flaky” rather than “broken” – roughly one attempt in three sticks. The earlier boot -7 shows the same shape at smaller scale (8 associations, 1 key negotiation).
Pair them yourself before trusting any “it works now”: a bare count of
wlan0: associated looks healthy during this failure, because the driver
keeps associating happily. The ratio is the signal, not the count.
What this rules out
- “The ath10k fixes were lost in the 6.18 -> 7.2 rebase.” They were not. Both
are in the product tree, and
0002is there in a better form than the filed patch – it distinguishesSET_KEY(restart the firmware) fromDISABLE_KEY(do not, it is the teardown path and a restart would convert a bounded 3 s stall into a multi-second outage). That refinement is whygit apply --check --reversereports the patch as not present; reverse-apply answers “is this exact diff in”, not “is this fixed”. - “The shipping kernel does not have them.” It does. The device runs the
aport build, not the tree, so check the artefact rather than the source:
stringson the running/lib/modules/$(uname -r)/.../ath10k_core.kocontainsvdev %i install key timed out, restarting hardware. - “This is the key-install-timeout path.” It is not.
install key timed outhas fired zero times in 11 boots and 8 days of journal, and there has been not one ath10k firmware crash, restart or recovery in the same window. The recovery that ships is real and has simply never been reached by this failure. - “WiFi instability shows up as ath10k errors.” Across the whole failing
boot, ath10k logged nothing but its normal probe lines plus a single
failed to extract amsdu: -11. The driver is silent while two thirds of connections fail. That silence is the actual obstacle.
What is NOT closed — and the instrument now in place
The open fork is one question, and nothing in the journal could answer it because wpa_supplicant at its default level does not record the EAPOL exchange:
- no
RX EAPOL-Keyat all -> the AP never sent msg 1/4, and the problem is on the receive side or at the AP; - msg 1/4 received but no completion -> our msg 2/4 never left the chip, which is the HTT tx-drop path (wifi-dies-while-still-reporting-connected describes exactly this: the firmware kept associating while returning a drop completion for every data frame).
/etc/systemd/system/wpa_supplicant.service.d/10-eapol-debug.conf now runs the
supplicant with -d, which logs the EAPOL state machine without hexdumping
every frame, so the journal survives a multi-day soak. The next occurrence
is diagnosable; previous ones were not. Revert by deleting that file,
systemctl daemon-reload, systemctl restart wpa_supplicant.
Next arm: leave it on a known-good AP, then pair the counts again and read the EAPOL lines around the unpaired associations.
