Search Linux Wireless

Re: [PATCH v3 2/2] ath9k: Fix STA disconnect issue due to received MIC failed bcast frames

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

 



On Fri, Dec 31, 2010 at 10:49:41PM +0530, Ben Greear wrote:
> On 12/06/2010 05:39 AM, Senthil Balasubramanian wrote:
> > AR_RxKeyIdxValid will not be set for bcast/mcast frames and so relying
> > this status for MIC failed frames is buggy.
> >
> > Due to this, MIC failure events for broadcast frames are not sent to
> > supplicant resulted in AP disconnecting the STA.
> >
> > Able to pass Wifi Test case 5.2.18 with this fix.
> 
> Did this ever make it into wireless-testing?  I just did
Yes.. 38852b20c8b6d97618204ac64abbf14f0080393e is the commit sha in the latest
-wl.
> a rebase, and I notice I'm still carrying this patch in my
> local tree?
> 
> Thanks,
> Ben
> 
> >
> > Cc: Stable<stable@xxxxxxxxxx>  (2.6.36+)
> > Signed-off-by: Senthil Balasubramanian<senthilkumar@xxxxxxxxxxx>
> > ---
> > v2 -- addressed invalid keyix overrun in tkip_keymap.
> > v3 -- fixed setting of rx decrypted flag in case of s/w crypto.
> >
> >   drivers/net/wireless/ath/ath9k/mac.c  |    3 +--
> >   drivers/net/wireless/ath/ath9k/recv.c |    9 ++++++++-
> >   2 files changed, 9 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/wireless/ath/ath9k/mac.c b/drivers/net/wireless/ath/ath9k/mac.c
> > index b04b37b..7978b27 100644
> > --- a/drivers/net/wireless/ath/ath9k/mac.c
> > +++ b/drivers/net/wireless/ath/ath9k/mac.c
> > @@ -702,8 +702,7 @@ int ath9k_hw_rxprocdesc(struct ath_hw *ah, struct ath_desc *ds,
> >   			rs->rs_phyerr = phyerr;
> >   		} else if (ads.ds_rxstatus8&  AR_DecryptCRCErr)
> >   			rs->rs_status |= ATH9K_RXERR_DECRYPT;
> > -		else if ((ads.ds_rxstatus8&  AR_MichaelErr)&&
> > -		         rs->rs_keyix != ATH9K_RXKEYIX_INVALID)
> > +		else if (ads.ds_rxstatus8&  AR_MichaelErr)
> >   			rs->rs_status |= ATH9K_RXERR_MIC;
> >   		else if (ads.ds_rxstatus8&  AR_KeyMiss)
> >   			rs->rs_status |= ATH9K_RXERR_DECRYPT;
> > diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c
> > index 262c815..876aa8f 100644
> > --- a/drivers/net/wireless/ath/ath9k/recv.c
> > +++ b/drivers/net/wireless/ath/ath9k/recv.c
> > @@ -840,6 +840,10 @@ static bool ath9k_rx_accept(struct ath_common *common,
> >   			    struct ath_rx_status *rx_stats,
> >   			    bool *decrypt_error)
> >   {
> > +#define is_mc_or_valid_tkip_keyix ((is_mc ||			\
> > +		(rx_stats->rs_keyix != ATH9K_RXKEYIX_INVALID&&  \
> > +		test_bit(rx_stats->rs_keyix, common->tkip_keymap))))
> > +
> >   	struct ath_hw *ah = common->ah;
> >   	__le16 fc;
> >   	u8 rx_status_len = ah->caps.rx_status_len;
> > @@ -881,15 +885,18 @@ static bool ath9k_rx_accept(struct ath_common *common,
> >   		if (rx_stats->rs_status&  ATH9K_RXERR_DECRYPT) {
> >   			*decrypt_error = true;
> >   		} else if (rx_stats->rs_status&  ATH9K_RXERR_MIC) {
> > +			bool is_mc;
> >   			/*
> >   			 * The MIC error bit is only valid if the frame
> >   			 * is not a control frame or fragment, and it was
> >   			 * decrypted using a valid TKIP key.
> >   			 */
> > +			is_mc = !!is_multicast_ether_addr(hdr->addr1);
> > +
> >   			if (!ieee80211_is_ctl(fc)&&
> >   			!ieee80211_has_morefrags(fc)&&
> >   			!(le16_to_cpu(hdr->seq_ctrl)&  IEEE80211_SCTL_FRAG)&&
> > -			    test_bit(rx_stats->rs_keyix, common->tkip_keymap))
> > +			    is_mc_or_valid_tkip_keyix)
> >   				rxs->flag |= RX_FLAG_MMIC_ERROR;
> >   			else
> >   				rx_stats->rs_status&= ~ATH9K_RXERR_MIC;
> 
> 
> -- 
> Ben Greear <greearb@xxxxxxxxxxxxxxx>
> Candela Technologies Inc  http://www.candelatech.com
> 
--
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