mac80211: ath11k: sync with ath-next
[openwrt/staging/dedeckeh.git] / package / kernel / mac80211 / patches / ath11k / 0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch
diff --git a/package/kernel/mac80211/patches/ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch b/package/kernel/mac80211/patches/ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch
new file mode 100644 (file)
index 0000000..7b8a7d4
--- /dev/null
@@ -0,0 +1,43 @@
+From 756a7f90878f0866fd2fe167ef37e90b47326b96 Mon Sep 17 00:00:00 2001
+From: P Praneesh <quic_ppranees@quicinc.com>
+Date: Fri, 24 Mar 2023 16:57:01 +0200
+Subject: [PATCH] wifi: ath11k: fix writing to unintended memory region
+
+While initializing spectral, the magic value is getting written to the
+invalid memory address leading to random boot-up crash. This occurs
+due to the incorrect index increment in ath11k_dbring_fill_magic_value
+function. Fix it by replacing the existing logic with memset32 to ensure
+there is no invalid memory access.
+
+Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01838-QCAHKSWPL_SILICONZ-1
+
+Fixes: d3d358efc553 ("ath11k: add spectral/CFR buffer validation support")
+Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
+Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
+Link: https://lore.kernel.org/r/20230321052900.16895-1-quic_ppranees@quicinc.com
+---
+ drivers/net/wireless/ath/ath11k/dbring.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/ath/ath11k/dbring.c
++++ b/drivers/net/wireless/ath/ath11k/dbring.c
+@@ -26,13 +26,13 @@ int ath11k_dbring_validate_buffer(struct
+ static void ath11k_dbring_fill_magic_value(struct ath11k *ar,
+                                          void *buffer, u32 size)
+ {
+-      u32 *temp;
+-      int idx;
++      /* memset32 function fills buffer payload with the ATH11K_DB_MAGIC_VALUE
++       * and the variable size is expected to be the number of u32 values
++       * to be stored, not the number of bytes.
++       */
++      size = size / sizeof(u32);
+-      size = size >> 2;
+-
+-      for (idx = 0, temp = buffer; idx < size; idx++, temp++)
+-              *temp++ = ATH11K_DB_MAGIC_VALUE;
++      memset32(buffer, ATH11K_DB_MAGIC_VALUE, size);
+ }
+ static int ath11k_dbring_bufs_replenish(struct ath11k *ar,