mac80211: fix potentially redundant skb data copying
authorFelix Fietkau <nbd@openwrt.org>
Sat, 18 Dec 2010 18:30:50 +0000 (19:30 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 20 Dec 2010 19:52:17 +0000 (14:52 -0500)
When an skb is shared, it needs to be duplicated, along with its data buffer.
If the skb does not have enough headroom, using skb_copy might cause the data
buffer to be copied twice (once by skb_copy and once by pskb_expand_head).
Fix this by using skb_clone initially and letting ieee80211_skb_resize sort
out the rest.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/tx.c

index 90ee235500332e9df881388669d128a36c283e53..d2b4b67a7b53d425e2767185f22a78dbd34c78a2 100644 (file)
@@ -1934,7 +1934,7 @@ netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
         */
        if (skb_shared(skb)) {
                tmp_skb = skb;
-               skb = skb_copy(skb, GFP_ATOMIC);
+               skb = skb_clone(skb, GFP_ATOMIC);
                kfree_skb(tmp_skb);
 
                if (!skb) {