Search Linux Wireless

Re: [PATCH] ath5k: Fix loop variable initializations

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

 



Thanks Bob!

This fixes http://bugzilla.kernel.org/show_bug.cgi?id=10605

Helge


Bob Copeland wrote:

> From: Bob Copeland <me@xxxxxxxxxxxxxxx>
> Date: Mon, 12 May 2008 09:25:33 -0400
> Subject: [PATCH] ath5k: Fix loop variable initializations
> 
> In ath5k_tasklet_rx, both status structures 'rxs' and 'rs' are
> initialized at the top of the tasklet, but not within the loop.
> If the loop is executed multiple times in the tasklet, then the
> variables may see changes from previous packets.
> 
> For TKIP, this results in 'Invalid Michael MIC' errors if two packets
> are processed in the tasklet: rxs.flag gets set to RX_DECRYPTED by
> mac80211 when it decrypts the first encrypted packet.  The subsequent
> packet will have RX_DECRYPTED set upon entry to mac80211, so mac80211
> will not try to decrypt it.
> 
> We currently initialize all but two fields in the structures, so fix
> the other two.
> 
> Signed-off-by: Bob Copeland <me@xxxxxxxxxxxxxxx>
> ---
>  drivers/net/wireless/ath5k/base.c |    2 +-
>  drivers/net/wireless/ath5k/hw.c   |    2 ++
>  2 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath5k/base.c
> b/drivers/net/wireless/ath5k/base.c index 4e5c8fc..fd8537e 100644
> --- a/drivers/net/wireless/ath5k/base.c
> +++ b/drivers/net/wireless/ath5k/base.c
> @@ -1888,7 +1888,7 @@ accept:
>  * right now, so it's not too bad...
>  */
>  rxs.mactime = ath5k_extend_tsf(sc->ah, rs.rs_tstamp);
> -             rxs.flag |= RX_FLAG_TSFT;
> +             rxs.flag = RX_FLAG_TSFT;
>  
>  rxs.freq = sc->curchan->center_freq;
>  rxs.band = sc->curband->band;
> diff --git a/drivers/net/wireless/ath5k/hw.c
> b/drivers/net/wireless/ath5k/hw.c index 5fb1ae6..8137d82 100644
> --- a/drivers/net/wireless/ath5k/hw.c
> +++ b/drivers/net/wireless/ath5k/hw.c
> @@ -4119,6 +4119,7 @@ static int ath5k_hw_proc_5210_rx_status(struct
> ath5k_hw *ah,
>  rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
>  AR5K_5210_RX_DESC_STATUS1_RECEIVE_TIMESTAMP);
>  rs->rs_status = 0;
> +     rs->rs_phyerr = 0;
>  
>  /*
>  * Key table status
> @@ -4193,6 +4194,7 @@ static int ath5k_hw_proc_5212_rx_status(struct
> ath5k_hw *ah,
>  rs->rs_tstamp = AR5K_REG_MS(rx_status->rx_status_1,
>  AR5K_5212_RX_DESC_STATUS1_RECEIVE_TIMESTAMP);
>  rs->rs_status = 0;
> +     rs->rs_phyerr = 0;
>  
>  /*
>  * Key table status


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux