madwifi: fix a node refcounting imbalance with a low (but nonzero) crash probability
[openwrt-10.03/.git] / package / madwifi / patches / 372-queue_vif.patch
index 24679860498630db3d54095edbba38a073d347a9..83576c8e6ce06b097902af63befbdae9b73af014 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -1181,6 +1181,7 @@
+@@ -1199,6 +1199,7 @@
                }
                if (skb1 != NULL) {
                        struct ieee80211_node *ni_tmp;
@@ -8,7 +8,7 @@
                        skb1->dev = dev;
                        skb_reset_mac_header(skb1);
                        skb_set_network_header(skb1, sizeof(struct ether_header));
-@@ -1188,7 +1189,12 @@
+@@ -1206,7 +1207,12 @@
                        skb1->protocol = __constant_htons(ETH_P_802_2);
                        /* XXX insert vlan tag before queue it? */
                        ni_tmp = SKB_CB(skb1)->ni; /* remember node so we can free it */
 +                      if (ret == NETDEV_TX_BUSY)
 +                              ieee80211_dev_kfree_skb(&skb1);
 +
-+                      if (ret != NETDEV_TX_OK) {
++                      else if (ret != NETDEV_TX_OK) {
                                /* If queue dropped the packet because device was
                                 * too busy */
                                vap->iv_devstats.tx_dropped++;
 --- a/net80211/ieee80211_output.c
 +++ b/net80211/ieee80211_output.c
-@@ -329,9 +329,10 @@
+@@ -333,9 +333,10 @@
        /* Dispatch the packet to the parent device */
        skb->dev = vap->iv_ic->ic_dev;