mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-08-21 17:42:25 +03:00
add a fix for memleaks caused by failed memory allocations
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10417 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
173844aad7
commit
6517ef0aa1
44
package/madwifi/patches/331-memory_alloc.patch
Normal file
44
package/madwifi/patches/331-memory_alloc.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
Index: madwifi-trunk-r3314/ath/if_ath.c
|
||||||
|
===================================================================
|
||||||
|
--- madwifi-trunk-r3314.orig/ath/if_ath.c 2008-02-08 04:11:11.775823441 +0100
|
||||||
|
+++ madwifi-trunk-r3314/ath/if_ath.c 2008-02-08 05:46:16.761139918 +0100
|
||||||
|
@@ -3308,17 +3308,18 @@
|
||||||
|
* 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
|
||||||
|
@@ -3584,11 +3585,13 @@
|
||||||
|
*/
|
||||||
|
error = ath_tx_start(dev, SKB_CB(skb)->ni, bf, skb, 0);
|
||||||
|
if (error)
|
||||||
|
- goto bad;
|
||||||
|
+ return error;
|
||||||
|
|
||||||
|
sc->sc_stats.ast_tx_mgmt++;
|
||||||
|
return 0;
|
||||||
|
bad:
|
||||||
|
+ if (skb)
|
||||||
|
+ ieee80211_dev_kfree_skb(&skb);
|
||||||
|
ath_return_txbuf(sc, &bf);
|
||||||
|
return error;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user