Search Linux Wireless

Re: [PATCH] mac80211 fix regression introduced by "mac80211: free up 2 bytes in skb->cb"

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

 



On Tue, 2008-10-14 at 23:57 +0200, Felix Fietkau wrote:
> The hw_key pointer is used (and obviously NULL) after skb->cb is
> memset to 0. This patch grabs the iv_len before the memset call.
> 
> Signed-off-by: Felix Fietkau <nbd@xxxxxxxxxxx>
> Signed-off-by: Stephen Blackheath <tramp.enshrine.stephen@xxxxxxxxxxxxxxxxx>

Subject should be "rt2x00: " instead of "mac80211 ", but

Acked-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>

> 
> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
> index 1676ac4..451d410 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
> @@ -374,7 +374,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
>  	struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX);
>  	struct txentry_desc txdesc;
>  	struct skb_frame_desc *skbdesc;
> -	unsigned int iv_len;
> +	unsigned int iv_len = 0;
>  
>  	if (unlikely(rt2x00queue_full(queue)))
>  		return -EINVAL;
> @@ -395,6 +395,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
>  	entry->skb = skb;
>  	rt2x00queue_create_tx_descriptor(entry, &txdesc);
>  
> +	if (IEEE80211_SKB_CB(skb)->control.hw_key != NULL)
> +		iv_len = IEEE80211_SKB_CB(skb)->control.hw_key->iv_len;
> +
>  	/*
>  	 * All information is retreived from the skb->cb array,
>  	 * now we should claim ownership of the driver part of that
> @@ -410,9 +413,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb)
>  	 * the frame so we can provide it to the driver seperately.
>  	 */
>  	if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc.flags) &&
> -	    !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags) &&
> -		(IEEE80211_SKB_CB(skb)->control.hw_key != NULL)) {
> -		iv_len = IEEE80211_SKB_CB(skb)->control.hw_key->iv_len;
> +	    !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags)) {
>  		rt2x00crypto_tx_remove_iv(skb, iv_len);
>  	}
>  
> 

Attachment: signature.asc
Description: This is a digitally signed message part


[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