diff options
| -rw-r--r-- | drivers/net/wireless/hostap/hostap_80211_tx.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/net/wireless/hostap/hostap_80211_tx.c b/drivers/net/wireless/hostap/hostap_80211_tx.c index 246fac0e8001..3df3c60263d4 100644 --- a/drivers/net/wireless/hostap/hostap_80211_tx.c +++ b/drivers/net/wireless/hostap/hostap_80211_tx.c | |||
| @@ -311,7 +311,7 @@ static struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, | |||
| 311 | local_info_t *local; | 311 | local_info_t *local; |
| 312 | struct ieee80211_hdr_4addr *hdr; | 312 | struct ieee80211_hdr_4addr *hdr; |
| 313 | u16 fc; | 313 | u16 fc; |
| 314 | int hdr_len, res; | 314 | int prefix_len, postfix_len, hdr_len, res; |
| 315 | 315 | ||
| 316 | iface = netdev_priv(skb->dev); | 316 | iface = netdev_priv(skb->dev); |
| 317 | local = iface->local; | 317 | local = iface->local; |
| @@ -337,10 +337,13 @@ static struct sk_buff * hostap_tx_encrypt(struct sk_buff *skb, | |||
| 337 | if (skb == NULL) | 337 | if (skb == NULL) |
| 338 | return NULL; | 338 | return NULL; |
| 339 | 339 | ||
| 340 | if ((skb_headroom(skb) < crypt->ops->extra_mpdu_prefix_len || | 340 | prefix_len = crypt->ops->extra_mpdu_prefix_len + |
| 341 | skb_tailroom(skb) < crypt->ops->extra_mpdu_postfix_len) && | 341 | crypt->ops->extra_msdu_prefix_len; |
| 342 | pskb_expand_head(skb, crypt->ops->extra_mpdu_prefix_len, | 342 | postfix_len = crypt->ops->extra_mpdu_postfix_len + |
| 343 | crypt->ops->extra_mpdu_postfix_len, GFP_ATOMIC)) { | 343 | crypt->ops->extra_msdu_postfix_len; |
| 344 | if ((skb_headroom(skb) < prefix_len || | ||
| 345 | skb_tailroom(skb) < postfix_len) && | ||
| 346 | pskb_expand_head(skb, prefix_len, postfix_len, GFP_ATOMIC)) { | ||
| 344 | kfree_skb(skb); | 347 | kfree_skb(skb); |
| 345 | return NULL; | 348 | return NULL; |
| 346 | } | 349 | } |
