Skip to content

Commit

Permalink
mwifiex: adding check for enough space before padding
Browse files Browse the repository at this point in the history
All MSDUs, except the last one in an AMSDU, should end up at 4
bytes boundary. There is need to check if enough skb_tailroom
space exists before padding the skb.

Also re-arranging code for better readablity.

Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Yogesh Ashok Powar authored and John W. Linville committed Jun 7, 2011
1 parent a8fe329 commit fb3c19b
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions drivers/net/wireless/mwifiex/11n_aggr.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,16 +185,15 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
tx_info_aggr->bss_index = tx_info_src->bss_index;
skb_aggr->priority = skb_src->priority;

while (skb_src && ((skb_headroom(skb_aggr) + skb_src->len
+ LLC_SNAP_LEN)
<= adapter->tx_buf_size)) {
do {
/* Check if AMSDU can accommodate this MSDU */
if (skb_tailroom(skb_aggr) < (skb_src->len + LLC_SNAP_LEN))
break;

skb_src = skb_dequeue(&pra_list->skb_head);

if (skb_src) {
pra_list->total_pkts_size -= skb_src->len;
pra_list->total_pkts--;
}
pra_list->total_pkts_size -= skb_src->len;
pra_list->total_pkts--;

atomic_dec(&priv->wmm.tx_pkts_queued);

Expand All @@ -212,8 +211,15 @@ mwifiex_11n_aggregate_pkt(struct mwifiex_private *priv,
return -1;
}

if (skb_tailroom(skb_aggr) < pad) {
pad = 0;
break;
}
skb_put(skb_aggr, pad);

skb_src = skb_peek(&pra_list->skb_head);
}

} while (skb_src);

spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock, ra_list_flags);

Expand Down

0 comments on commit fb3c19b

Please sign in to comment.