]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath12k: Fix for out-of bound access error
authorKarol Przybylski <karprzy7@gmail.com>
Tue, 5 Nov 2024 10:11:31 +0000 (11:11 +0100)
committerJeff Johnson <quic_jjohnson@quicinc.com>
Wed, 13 Nov 2024 00:44:55 +0000 (16:44 -0800)
Selfgen stats are placed in a buffer using print_array_to_buf_index() function.
Array length parameter passed to the function is too big, resulting in possible
out-of bound memory error.
Decreasing buffer size by one fixes faulty upper bound of passed array.

Discovered in coverity scan, CID 1600742 and CID 1600758

Signed-off-by: Karol Przybylski <karprzy7@gmail.com>
Acked-by: Kalle Valo <kvalo@kernel.org>
Link: https://patch.msgid.link/20241105101132.374372-1-karprzy7@gmail.com
Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
drivers/net/wireless/ath/ath12k/debugfs_htt_stats.c

index c9980c0193d1d78c0a0796cf99f7390fadfc7b3a..43ea87e981f421bba389c8682b8b8dad75b7ec65 100644 (file)
@@ -1562,7 +1562,8 @@ ath12k_htt_print_tx_selfgen_ac_stats_tlv(const void *tag_buf, u16 tag_len,
                         le32_to_cpu(htt_stats_buf->ac_mu_mimo_ndp));
        len += print_array_to_buf_index(buf, len, "ac_mu_mimo_brpollX_tried = ", 1,
                                        htt_stats_buf->ac_mu_mimo_brpoll,
-                                       ATH12K_HTT_TX_NUM_AC_MUMIMO_USER_STATS, "\n\n");
+                                       ATH12K_HTT_TX_NUM_AC_MUMIMO_USER_STATS - 1,
+                                       "\n\n");
 
        stats_req->buf_len = len;
 }
@@ -1590,7 +1591,7 @@ ath12k_htt_print_tx_selfgen_ax_stats_tlv(const void *tag_buf, u16 tag_len,
                         le32_to_cpu(htt_stats_buf->ax_mu_mimo_ndp));
        len += print_array_to_buf_index(buf, len, "ax_mu_mimo_brpollX_tried = ", 1,
                                        htt_stats_buf->ax_mu_mimo_brpoll,
-                                       ATH12K_HTT_TX_NUM_AX_MUMIMO_USER_STATS, "\n");
+                                       ATH12K_HTT_TX_NUM_AX_MUMIMO_USER_STATS - 1, "\n");
        len += scnprintf(buf + len, buf_len - len, "ax_basic_trigger = %u\n",
                         le32_to_cpu(htt_stats_buf->ax_basic_trigger));
        len += scnprintf(buf + len, buf_len - len, "ax_ulmumimo_total_trigger = %u\n",