Search Linux Wireless

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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Minsuk Kang <linuxlovemin@xxxxxxxxxxxx> writes:

> 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: Minsuk Kang <linuxlovemin@xxxxxxxxxxxx>
> ---
>  drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> index 800177021baf..c628332f2562 100644
> --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
> @@ -652,9 +652,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(txs->cnt > HTC_MAX_TX_STATUS))
> +		return;

Since this is something that can be triggered by a device sending bad
data, this shouldn't be an unbounded WARN_ON(). We could turn it into a
WARN_ON_ONCE(), or just get rid of it entirely...

-Toke



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux