1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-25 23:57:21 +02:00
openwrt-xburst/package/madwifi/patches/331-memory_alloc.patch
nbd c537863342 madwifi: fix noderef and state machine issues in the currently unused ap-to-ap wds mode; refresh patches
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@13096 3c298f89-4303-0410-b956-a3cf2f4a3e73
2008-11-02 13:04:36 +00:00

37 lines
1.0 KiB
Diff

--- a/ath/if_ath.c
+++ b/ath/if_ath.c
@@ -3320,17 +3320,18 @@ ath_hardstart(struct sk_buff *skb, struc
* without affecting any other bridge ports. */
if (skb_cloned(skb)) {
/* Remember the original SKB so we can free up our references */
- struct sk_buff *skb_orig = skb;
- skb = skb_copy(skb, GFP_ATOMIC);
- if (skb == NULL) {
+ struct sk_buff *skb_new;
+ skb_new = skb_copy(skb, GFP_ATOMIC);
+ if (skb_new == NULL) {
DPRINTF(sc, ATH_DEBUG_XMIT,
"Dropping; skb_copy failure.\n");
/* No free RAM, do not requeue! */
goto hardstart_fail;
}
- ieee80211_skb_copy_noderef(skb_orig, skb);
- ieee80211_dev_kfree_skb(&skb_orig);
- }
+ ieee80211_skb_copy_noderef(skb, skb_new);
+ ieee80211_dev_kfree_skb(&skb);
+ skb = skb_new;
+ }
eh = (struct ether_header *)skb->data;
#ifdef ATH_SUPERG_FF
@@ -3601,6 +3602,8 @@ ath_mgtstart(struct ieee80211com *ic, st
sc->sc_stats.ast_tx_mgmt++;
return 0;
bad:
+ if (skb)
+ ieee80211_dev_kfree_skb(&skb);
ath_return_txbuf(sc, &bf);
return error;
}