Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f11f0fd1 authored by Minsuk Kang's avatar Minsuk Kang Committed by Greg Kroah-Hartman
Browse files

wifi: ath9k: Fix potential array-index-out-of-bounds read in ath9k_htc_txstatus()



[ Upstream commit 2adc886244dff60f948497b59affb6c6ebb3c348 ]

Fix an array-index-out-of-bounds read in ath9k_htc_txstatus(). The bug
occurs when txs->cnt, data from a URB provided by a USB device, is
bigger than the size of the array txs->txstatus, which is
HTC_MAX_TX_STATUS. WARN_ON() already checks it, but there is no bug
handling code after the check. Make the function return if that is the
case.

Found by a modified version of syzkaller.

UBSAN: array-index-out-of-bounds in htc_drv_txrx.c
index 13 is out of range for type '__wmi_event_txstatus [12]'
Call Trace:
 ath9k_htc_txstatus
 ath9k_wmi_event_tasklet
 tasklet_action_common
 __do_softirq
 irq_exit_rxu
 sysvec_apic_timer_interrupt

Signed-off-by: default avatarMinsuk Kang <linuxlovemin@yonsei.ac.kr>
Acked-by: default avatarToke Høiland-Jørgensen <toke@toke.dk>
Signed-off-by: default avatarKalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20231113065756.1491991-1-linuxlovemin@yonsei.ac.kr


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 53dd674b
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -647,9 +647,10 @@ void ath9k_htc_txstatus(struct ath9k_htc_priv *priv, void *wmi_event)
	struct ath9k_htc_tx_event *tx_pend;
	int i;

	for (i = 0; i < txs->cnt; i++) {
		WARN_ON(txs->cnt > HTC_MAX_TX_STATUS);
	if (WARN_ON_ONCE(txs->cnt > HTC_MAX_TX_STATUS))
		return;

	for (i = 0; i < txs->cnt; i++) {
		__txs = &txs->txstatus[i];

		skb = ath9k_htc_tx_get_packet(priv, __txs);