Linux: wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate
What fixes it
- 6ad04c3e2ec54bf5ec72c81afdd66318a116c539LinuxCVE List
- 2bb2a778a487305bd378db5fd5014fbdce4ada2cLinuxCVE List
- 12b09e478aa7459b7893a695ef77682202f2da83LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate
ath11k can receive HT/VHT/HE frames whose reported MCS is above the maximum that can be expressed in the corresponding mac80211 rate space (e.g. an HE frame reported with MCS 12, while HE tops out at MCS 11).
The frame itself is valid and decodes correctly, but for such a frame ath11k_dp_rx_h_rate() leaves rx_status->rate_idx set to the out-of-range value and never assigns rx_status->encoding, so it stays RX_ENC_LEGACY from the ath11k_dp_rx_h_ppdu() initialization. Once that frame reaches mac80211 it trips the rate sanity check and the frame is dropped with a splat:
ath11k_pci 0000:03:00.0: Received with invalid mcs in HE mode 12 WARNING: CPU: 0 PID: 0 at net/mac80211/rx.c:5433 ieee80211_rx_list+0xb0a/0xe90 [mac80211]
Dropping the frame would discard otherwise valid data, so instead cap the reported MCS to the maximum the rate space can express and deliver the frame. Set rx_status->encoding before the range check and assign rate_idx from the capped value, so a frame with an out-of-range MCS no longer leaves partial or bogus rate metadata behind. Also downgrade the logging level since they are not treated as invalid frames now. The only loss is that such a frame is reported as the capped MCS in the rx rate statistics.
Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41
Text from CVE List
Affected versions 18
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before 6ad04c3e2ec54bf5ec72c81afdd66318a116c539CVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before a6b951f79e66fc8bd93a537ff1040fbfb567c8bfCVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before b77bfe6e59b98dff3ccfcf9b45fc27e3db498626CVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before fb7b9a7209f839c17c66484dfdc84c9a23c6fd2fCVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before a0b3e6f9645d88f387c4fea546048a91952cd4cdCVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before 2bb2a778a487305bd378db5fd5014fbdce4ada2cCVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before ccbd20f2168f581d90265da1a925b9b6472a0b05CVE List
- Linuxaffected: d5c65159f2895379e11ca13f62feabe93278985d before 12b09e478aa7459b7893a695ef77682202f2da83CVE List
- Linuxaffected: 5.6CVE List
- Linuxunaffected: all versions before 5.6CVE List
- Linuxunaffected: 5.10.270 through 5.10.*CVE List
- Linuxunaffected: 5.15.221 through 5.15.*CVE List
- Linuxunaffected: 6.1.188 through 6.1.*CVE List
- Linuxunaffected: 6.6.157 through 6.6.*CVE List
- Linuxunaffected: 6.12.110 through 6.12.*CVE List
- Linuxunaffected: 6.18.52 through 6.18.*CVE List
- Linuxunaffected: 7.2.6 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 8
- git.kernel.org/stable/c/6ad04c3e2ec54bf5ec72c81afdd66318a116c539Referencevia CVE List
- git.kernel.org/stable/c/a6b951f79e66fc8bd93a537ff1040fbfb567c8bfReferencevia CVE List
- git.kernel.org/stable/c/b77bfe6e59b98dff3ccfcf9b45fc27e3db498626Referencevia CVE List
- git.kernel.org/stable/c/fb7b9a7209f839c17c66484dfdc84c9a23c6fd2fReferencevia CVE List
- git.kernel.org/stable/c/a0b3e6f9645d88f387c4fea546048a91952cd4cdReferencevia CVE List
- git.kernel.org/stable/c/2bb2a778a487305bd378db5fd5014fbdce4ada2cReferencevia CVE List
- git.kernel.org/stable/c/ccbd20f2168f581d90265da1a925b9b6472a0b05Referencevia CVE List
- git.kernel.org/stable/c/12b09e478aa7459b7893a695ef77682202f2da83Referencevia CVE List