Advisory Published
CVE Published
Updated

CVE-2023-52611: wifi: rtw88: sdio: Honor the host max_req_size in the RX path

First published: Mon Mar 18 2024(Updated: )

In the Linux kernel, the following vulnerability has been resolved: wifi: rtw88: sdio: Honor the host max_req_size in the RX path Lukas reports skb_over_panic errors on his Banana Pi BPI-CM4 which comes with an Amlogic A311D (G12B) SoC and a RTL8822CS SDIO wifi/Bluetooth combo card. The error he observed is identical to what has been fixed in commit e967229ead0e ("wifi: rtw88: sdio: Check the HISR RX_REQUEST bit in rtw_sdio_rx_isr()") but that commit didn't fix Lukas' problem. Lukas found that disabling or limiting RX aggregation works around the problem for some time (but does not fully fix it). In the following discussion a few key topics have been discussed which have an impact on this problem: - The Amlogic A311D (G12B) SoC has a hardware bug in the SDIO controller which prevents DMA transfers. Instead all transfers need to go through the controller SRAM which limits transfers to 1536 bytes - rtw88 chips don't split incoming (RX) packets, so if a big packet is received this is forwarded to the host in it's original form - rtw88 chips can do RX aggregation, meaning more multiple incoming packets can be pulled by the host from the card with one MMC/SDIO transfer. This Depends on settings in the REG_RXDMA_AGG_PG_TH register (BIT_RXDMA_AGG_PG_TH limits the number of packets that will be aggregated, BIT_DMA_AGG_TO_V1 configures a timeout for aggregation and BIT_EN_PRE_CALC makes the chip honor the limits more effectively) Use multiple consecutive reads in rtw_sdio_read_port() and limit the number of bytes which are copied by the host from the card in one MMC/SDIO transfer. This allows receiving a buffer that's larger than the hosts max_req_size (number of bytes which can be transferred in one MMC/SDIO transfer). As a result of this the skb_over_panic error is gone as the rtw88 driver is now able to receive more than 1536 bytes from the card (either because the incoming packet is larger than that or because multiple packets have been aggregated). In case of an receive errors (-EILSEQ has been observed by Lukas) we need to drain the remaining data from the card's buffer, otherwise the card will return corrupt data for the next rtw_sdio_read_port() call.

Credit: 416baaa9-dc9f-4396-8d5f-8c081fb06d67 416baaa9-dc9f-4396-8d5f-8c081fb06d67

Affected SoftwareAffected VersionHow to fix
ubuntu/linux<6.5.0-41.41
6.5.0-41.41
ubuntu/linux<6.8~
6.8~
ubuntu/linux-aws<6.5.0-1021.21
6.5.0-1021.21
ubuntu/linux-aws<6.8~
6.8~
ubuntu/linux-aws-5.15<6.8~
6.8~
ubuntu/linux-aws-5.4<6.8~
6.8~
ubuntu/linux-aws-6.5<6.8~
6.8~
ubuntu/linux-aws-fips<6.8~
6.8~
ubuntu/linux-aws-hwe<6.8~
6.8~
ubuntu/linux-azure<6.5.0-1022.23
6.5.0-1022.23
ubuntu/linux-azure<6.8~
6.8~
ubuntu/linux-azure-4.15<6.8~
6.8~
ubuntu/linux-azure-5.15<6.8~
6.8~
ubuntu/linux-azure-5.4<6.8~
6.8~
ubuntu/linux-azure-6.5<6.5.0-1022.23~22.04.1
6.5.0-1022.23~22.04.1
ubuntu/linux-azure-6.5<6.8~
6.8~
ubuntu/linux-azure-fde<6.8~
6.8~
ubuntu/linux-azure-fde-5.15<6.8~
6.8~
ubuntu/linux-azure-fips<6.8~
6.8~
ubuntu/linux-bluefield<6.8~
6.8~
ubuntu/linux-fips<6.8~
6.8~
ubuntu/linux-gcp<6.5.0-1022.24
6.5.0-1022.24
ubuntu/linux-gcp<6.8~
6.8~
ubuntu/linux-gcp-4.15<6.8~
6.8~
ubuntu/linux-gcp-5.15<6.8~
6.8~
ubuntu/linux-gcp-5.4<6.8~
6.8~
ubuntu/linux-gcp-6.5<6.5.0-1022.24~22.04.1
6.5.0-1022.24~22.04.1
ubuntu/linux-gcp-6.5<6.8~
6.8~
ubuntu/linux-gcp-fips<6.8~
6.8~
ubuntu/linux-gke<6.8~
6.8~
ubuntu/linux-gkeop<6.8~
6.8~
ubuntu/linux-gkeop-5.15<6.8~
6.8~
ubuntu/linux-hwe<6.8~
6.8~
ubuntu/linux-hwe-5.15<6.8~
6.8~
ubuntu/linux-hwe-5.4<6.8~
6.8~
ubuntu/linux-hwe-6.5<6.5.0-41.41~22.04.2
6.5.0-41.41~22.04.2
ubuntu/linux-hwe-6.5<6.8~
6.8~
ubuntu/linux-ibm<6.8~
6.8~
ubuntu/linux-ibm-5.15<6.8~
6.8~
ubuntu/linux-ibm-5.4<6.8~
6.8~
ubuntu/linux-intel<6.8~
6.8~
ubuntu/linux-intel-iotg<6.8~
6.8~
ubuntu/linux-intel-iotg-5.15<6.8~
6.8~
ubuntu/linux-iot<6.8~
6.8~
ubuntu/linux-kvm<6.8~
6.8~
ubuntu/linux-laptop<6.5.0-1017.20
6.5.0-1017.20
ubuntu/linux-laptop<6.8~
6.8~
ubuntu/linux-lowlatency<6.5.0-41.41.1
6.5.0-41.41.1
ubuntu/linux-lowlatency<6.8~
6.8~
ubuntu/linux-lowlatency-hwe-5.15<6.8~
6.8~
ubuntu/linux-lowlatency-hwe-6.5<6.5.0-41.41.1~22.04.1
6.5.0-41.41.1~22.04.1
ubuntu/linux-lowlatency-hwe-6.5<6.8~
6.8~
ubuntu/linux-lts-xenial<6.8~
6.8~
ubuntu/linux-nvidia<6.8~
6.8~
ubuntu/linux-nvidia-6.5<6.5.0-1021.22
6.5.0-1021.22
ubuntu/linux-nvidia-6.5<6.8~
6.8~
ubuntu/linux-nvidia-6.8<6.8~
6.8~
ubuntu/linux-nvidia-lowlatency<6.8~
6.8~
ubuntu/linux-oem-6.1<6.8~
6.8~
ubuntu/linux-oem-6.5<6.5.0-1024.25
6.5.0-1024.25
ubuntu/linux-oem-6.5<6.8~
6.8~
ubuntu/linux-oem-6.8<6.8~
6.8~
ubuntu/linux-oracle<6.5.0-1024.24
6.5.0-1024.24
ubuntu/linux-oracle<6.8~
6.8~
ubuntu/linux-oracle-5.15<6.8~
6.8~
ubuntu/linux-oracle-5.4<6.8~
6.8~
ubuntu/linux-oracle-6.5<6.5.0-1024.24~22.04.1
6.5.0-1024.24~22.04.1
ubuntu/linux-oracle-6.5<6.8~
6.8~
ubuntu/linux-raspi<6.5.0-1018.21
6.5.0-1018.21
ubuntu/linux-raspi<6.8~
6.8~
ubuntu/linux-raspi-5.4<6.8~
6.8~
ubuntu/linux-riscv<6.5.0-40.40.1
6.5.0-40.40.1
ubuntu/linux-riscv<6.8~
6.8~
ubuntu/linux-riscv-5.15<6.8~
6.8~
ubuntu/linux-riscv-6.5<6.5.0-40.40.1~22.04.1
6.5.0-40.40.1~22.04.1
ubuntu/linux-riscv-6.5<6.8~
6.8~
ubuntu/linux-starfive<6.5.0-1015.16
6.5.0-1015.16
ubuntu/linux-starfive<6.8~
6.8~
ubuntu/linux-starfive-6.5<6.5.0-1015.16~22.04.1
6.5.0-1015.16~22.04.1
ubuntu/linux-starfive-6.5<6.8~
6.8~
ubuntu/linux-xilinx-zynqmp<6.8~
6.8~
debian/linux
5.10.223-1
6.1.106-3
6.1.99-1
6.10.6-1
6.10.7-1

Never miss a vulnerability like this again

Sign up to SecAlerts for real-time vulnerability data matched to your software, aggregated from hundreds of sources.

Parent vulnerabilities

(Appears in the following advisories)

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2024 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203