projects
/
openwrt
/
svn-archive
/
archive.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1116d75
)
madwifi: fix a wds related race condition
author
Felix Fietkau
<nbd@openwrt.org>
Mon, 14 Sep 2009 10:45:34 +0000
(10:45 +0000)
committer
Felix Fietkau
<nbd@openwrt.org>
Mon, 14 Sep 2009 10:45:34 +0000
(10:45 +0000)
SVN-Revision: 17578
12 files changed:
package/madwifi/patches/370-wdsvap.patch
patch
|
blob
|
history
package/madwifi/patches/372-queue_vif.patch
patch
|
blob
|
history
package/madwifi/patches/378-adhoc_crash_fix.patch
patch
|
blob
|
history
package/madwifi/patches/387-maxassoc.patch
patch
|
blob
|
history
package/madwifi/patches/390-frame_type.patch
patch
|
blob
|
history
package/madwifi/patches/391-vap_auth.patch
patch
|
blob
|
history
package/madwifi/patches/393-mbss_vap_auth.patch
patch
|
blob
|
history
package/madwifi/patches/394-probereq.patch
patch
|
blob
|
history
package/madwifi/patches/396-napi_ff_fix.patch
patch
|
blob
|
history
package/madwifi/patches/411-autochannel_multi.patch
patch
|
blob
|
history
package/madwifi/patches/432-netdev_ops.patch
patch
|
blob
|
history
package/madwifi/patches/441-fix_ibss_node_handling.patch
patch
|
blob
|
history
diff --git
a/package/madwifi/patches/370-wdsvap.patch
b/package/madwifi/patches/370-wdsvap.patch
index 488e7b2444f282e4de2d61804a8da21919e35ecc..9da13a6c5c7bdb2aea3f49a624eb523fcd4cebf7 100644
(file)
--- a/
package/madwifi/patches/370-wdsvap.patch
+++ b/
package/madwifi/patches/370-wdsvap.patch
@@
-748,7
+748,7
@@
IEEE80211_NODE_STAT(ni, rx_data);
IEEE80211_NODE_STAT_ADD(ni, rx_bytes, skb->len);
ic->ic_lastdata = jiffies;
IEEE80211_NODE_STAT(ni, rx_data);
IEEE80211_NODE_STAT_ADD(ni, rx_bytes, skb->len);
ic->ic_lastdata = jiffies;
-@@ -1114,6 +1142,1
7
@@ ieee80211_deliver_data(struct ieee80211_
+@@ -1114,6 +1142,1
8
@@ ieee80211_deliver_data(struct ieee80211_
dev = vap->iv_xrvap->iv_dev;
#endif
dev = vap->iv_xrvap->iv_dev;
#endif
@@
-757,6
+757,7
@@
+ if (ni->ni_subif && ((eh)->ether_type != __constant_htons(ETHERTYPE_PAE))) {
+ if (ni->ni_vap == ni->ni_subif) {
+ ieee80211_dev_kfree_skb(&skb);
+ if (ni->ni_subif && ((eh)->ether_type != __constant_htons(ETHERTYPE_PAE))) {
+ if (ni->ni_vap == ni->ni_subif) {
+ ieee80211_dev_kfree_skb(&skb);
++ return;
+ } else {
+ vap = ni->ni_subif;
+ dev = vap->iv_dev;
+ } else {
+ vap = ni->ni_subif;
+ dev = vap->iv_dev;
@@
-766,7
+767,7
@@
/* perform as a bridge within the vap */
/* XXX intra-vap bridging only */
if (vap->iv_opmode == IEEE80211_M_HOSTAP &&
/* perform as a bridge within the vap */
/* XXX intra-vap bridging only */
if (vap->iv_opmode == IEEE80211_M_HOSTAP &&
-@@ -1139,7 +117
8
,16 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -1139,7 +117
9
,16 @@ ieee80211_deliver_data(struct ieee80211_
if (ni1 != NULL) {
if (ni1->ni_vap == vap &&
ieee80211_node_is_authorized(ni1) &&
if (ni1 != NULL) {
if (ni1->ni_vap == vap &&
ieee80211_node_is_authorized(ni1) &&
@@
-783,7
+784,7
@@
skb1 = skb;
skb = NULL;
}
skb1 = skb;
skb = NULL;
}
-@@ -3084,8 +313
2
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3084,8 +313
3
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
(vap->iv_opmode == IEEE80211_M_STA && ni->ni_associd) ||
(vap->iv_opmode == IEEE80211_M_IBSS) ||
((subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
(vap->iv_opmode == IEEE80211_M_STA && ni->ni_associd) ||
(vap->iv_opmode == IEEE80211_M_IBSS) ||
((subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
@@
-793,7
+794,7
@@
vap->iv_stats.is_rx_mgtdiscard++;
return;
}
vap->iv_stats.is_rx_mgtdiscard++;
return;
}
-@@ -3471,13 +351
8
,54 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3471,13 +351
9
,54 @@ ieee80211_recv_mgmt(struct ieee80211vap
*/
if (ic->ic_flags & IEEE80211_F_SCAN) {
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
*/
if (ic->ic_flags & IEEE80211_F_SCAN) {
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
@@
-853,7
+854,7
@@
} else {
/*
* Copy data from beacon to neighbor table.
} else {
/*
* Copy data from beacon to neighbor table.
-@@ -3490,6 +357
8
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3490,6 +357
9
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
memcpy(ni->ni_tstamp.data, scan.tstamp,
sizeof(ni->ni_tstamp));
IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
memcpy(ni->ni_tstamp.data, scan.tstamp,
sizeof(ni->ni_tstamp));
diff --git
a/package/madwifi/patches/372-queue_vif.patch
b/package/madwifi/patches/372-queue_vif.patch
index 1c31fff7f9eb894f5fabb4e77962952549123a36..aa32b1b227fda8fd5af7c4160b334d0cd6629480 100644
(file)
--- a/
package/madwifi/patches/372-queue_vif.patch
+++ b/
package/madwifi/patches/372-queue_vif.patch
@@
-1,6
+1,6
@@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -119
7,6 +1197
,7 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -119
8,6 +1198
,7 @@ ieee80211_deliver_data(struct ieee80211_
}
if (skb1 != NULL) {
struct ieee80211_node *ni_tmp;
}
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));
skb1->dev = dev;
skb_reset_mac_header(skb1);
skb_set_network_header(skb1, sizeof(struct ether_header));
-@@ -120
4,7 +1205
,12 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -120
5,7 +1206
,12 @@ ieee80211_deliver_data(struct ieee80211_
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 */
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 */
diff --git
a/package/madwifi/patches/378-adhoc_crash_fix.patch
b/package/madwifi/patches/378-adhoc_crash_fix.patch
index 85183e6a71e99f5e5728be2ffc7f3e8c06ed7144..1d699a5ffa7e7a9c22bf085b6abedaa6de74c5b9 100644
(file)
--- a/
package/madwifi/patches/378-adhoc_crash_fix.patch
+++ b/
package/madwifi/patches/378-adhoc_crash_fix.patch
@@
-1,6
+1,6
@@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -352
8,6 +3528
,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -352
9,6 +3529
,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
if (ic->ic_flags & IEEE80211_F_SCAN) {
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
}
if (ic->ic_flags & IEEE80211_F_SCAN) {
ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
}
diff --git
a/package/madwifi/patches/387-maxassoc.patch
b/package/madwifi/patches/387-maxassoc.patch
index 1dc788e7d169474212853a6b4c5aad658de134d2..d74419bdb055e6f402566b14d5ca2e65e88cf475 100644
(file)
--- a/
package/madwifi/patches/387-maxassoc.patch
+++ b/
package/madwifi/patches/387-maxassoc.patch
@@
-56,7
+56,7
@@
/*
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
/*
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -401
7,7 +4017
,26 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -401
8,7 +4018
,26 @@ ieee80211_recv_mgmt(struct ieee80211vap
vap->iv_stats.is_rx_assoc_norate++;
return;
}
vap->iv_stats.is_rx_assoc_norate++;
return;
}
diff --git
a/package/madwifi/patches/390-frame_type.patch
b/package/madwifi/patches/390-frame_type.patch
index 71d658b4e54f2f3785ef78f5b1266f32e3b57935..caad49c3d3fc8f335bf60083d7de5c58d7e78b51 100644
(file)
--- a/
package/madwifi/patches/390-frame_type.patch
+++ b/
package/madwifi/patches/390-frame_type.patch
@@
-1,6
+1,6
@@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -444
0,7 +4440
,9 @@ ath_eth_type_trans(struct sk_buff *skb,
+@@ -444
1,7 +4441
,9 @@ ath_eth_type_trans(struct sk_buff *skb,
if (memcmp(eth->h_dest, dev->dev_addr, ETH_ALEN))
skb->pkt_type = PACKET_OTHERHOST;
if (memcmp(eth->h_dest, dev->dev_addr, ETH_ALEN))
skb->pkt_type = PACKET_OTHERHOST;
diff --git
a/package/madwifi/patches/391-vap_auth.patch
b/package/madwifi/patches/391-vap_auth.patch
index b317be048260a3cd3abf3d67bfc64a1cf4011cb3..832f9e116209c736a88d4edfbb135804142be9dc 100644
(file)
--- a/
package/madwifi/patches/391-vap_auth.patch
+++ b/
package/madwifi/patches/391-vap_auth.patch
@@
-1,6
+1,6
@@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -137
4,7 +1374
,7 @@ ieee80211_auth_open(struct ieee80211_nod
+@@ -137
5,7 +1375
,7 @@ ieee80211_auth_open(struct ieee80211_nod
vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
if (ni == vap->iv_bss) {
vap->iv_stats.is_rx_bad_auth++; /* XXX maybe a unique error? */
if (vap->iv_opmode == IEEE80211_M_HOSTAP) {
if (ni == vap->iv_bss) {
@@
-9,7
+9,7
@@
if (ni == NULL)
return;
tmpnode = 1;
if (ni == NULL)
return;
tmpnode = 1;
-@@ -176
2,6 +1762
,8 @@ ieee80211_ssid_mismatch(struct ieee80211
+@@ -176
3,6 +1763
,8 @@ ieee80211_ssid_mismatch(struct ieee80211
}
#define IEEE80211_VERIFY_SSID(_ni, _ssid) do { \
}
#define IEEE80211_VERIFY_SSID(_ni, _ssid) do { \
@@
-18,7
+18,7
@@
if ((_ssid)[1] != 0 && \
((_ssid)[1] != (_ni)->ni_esslen || \
memcmp((_ssid) + 2, (_ni)->ni_essid, (_ssid)[1]) != 0)) { \
if ((_ssid)[1] != 0 && \
((_ssid)[1] != (_ni)->ni_esslen || \
memcmp((_ssid) + 2, (_ni)->ni_essid, (_ssid)[1]) != 0)) { \
-@@ -177
6,6 +1778
,8 @@ ieee80211_ssid_mismatch(struct ieee80211
+@@ -177
7,6 +1779
,8 @@ ieee80211_ssid_mismatch(struct ieee80211
} while (0)
#else /* !IEEE80211_DEBUG */
#define IEEE80211_VERIFY_SSID(_ni, _ssid) do { \
} while (0)
#else /* !IEEE80211_DEBUG */
#define IEEE80211_VERIFY_SSID(_ni, _ssid) do { \
diff --git
a/package/madwifi/patches/393-mbss_vap_auth.patch
b/package/madwifi/patches/393-mbss_vap_auth.patch
index d184fa2abb0ab491e6ebbd941e53001f8cbe65ed..71e11fa39a8cd2618507cbea75b6c28eb444ecff 100644
(file)
--- a/
package/madwifi/patches/393-mbss_vap_auth.patch
+++ b/
package/madwifi/patches/393-mbss_vap_auth.patch
@@
-305,7
+305,7
@@
if (skb != NULL) /* no vaps, reclaim skb */
ieee80211_dev_kfree_skb(&skb);
return type;
if (skb != NULL) /* no vaps, reclaim skb */
ieee80211_dev_kfree_skb(&skb);
return type;
-@@ -114
6,11 +1157
,9 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -114
7,11 +1158
,9 @@ ieee80211_deliver_data(struct ieee80211_
* sending it will not work; just let it be
* delivered normally.
*/
* sending it will not work; just let it be
* delivered normally.
*/
@@
-319,7
+319,7
@@
!ni1->ni_subif &&
ni1 != vap->iv_bss) {
!ni1->ni_subif &&
ni1 != vap->iv_bss) {
-@@ -35
19,6 +3528
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -35
20,6 +3529
,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
(vap->iv_opmode == IEEE80211_M_WDS)) &&
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
struct ieee80211vap *avp = NULL;
(vap->iv_opmode == IEEE80211_M_WDS)) &&
(scan.capinfo & IEEE80211_CAPINFO_ESS))) {
struct ieee80211vap *avp = NULL;
@@
-327,7
+327,7
@@
int found = 0;
IEEE80211_LOCK_IRQ(vap->iv_ic);
int found = 0;
IEEE80211_LOCK_IRQ(vap->iv_ic);
-@@ -355
0,10 +3560
,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -355
1,10 +3561
,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
ni->ni_associd |= 0xc000;
avp->iv_wdsnode = ieee80211_ref_node(ni);
IEEE80211_UNLOCK_IRQ(ic);
ni->ni_associd |= 0xc000;
avp->iv_wdsnode = ieee80211_ref_node(ni);
IEEE80211_UNLOCK_IRQ(ic);
@@
-341,7
+341,7
@@
} else {
/*
* Copy data from beacon to neighbor table.
} else {
/*
* Copy data from beacon to neighbor table.
-@@ -359
2,6 +3604
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -359
3,6 +3605
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
ni->ni_rssi = rssi;
ni->ni_rtsf = rtsf;
ni->ni_last_rx = jiffies;
ni->ni_rssi = rssi;
ni->ni_rtsf = rtsf;
ni->ni_last_rx = jiffies;
diff --git
a/package/madwifi/patches/394-probereq.patch
b/package/madwifi/patches/394-probereq.patch
index 1dd0bcd136ce1146efbb8c9df76a0018a53b9b08..becd4c99f5e0420b93717e49de43eefe19bc944e 100644
(file)
--- a/
package/madwifi/patches/394-probereq.patch
+++ b/
package/madwifi/patches/394-probereq.patch
@@
-1,6
+1,6
@@
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -361
8,6 +3618
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -361
9,6 +3619
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
vap->iv_stats.is_rx_mgtdiscard++;
return;
}
vap->iv_stats.is_rx_mgtdiscard++;
return;
}
diff --git
a/package/madwifi/patches/396-napi_ff_fix.patch
b/package/madwifi/patches/396-napi_ff_fix.patch
index 7ab5a1109411a5c5cddd897748c252d27d0c2f65..f84c4b4d77230f940a148c7424cb65b6112db2e2 100644
(file)
--- a/
package/madwifi/patches/396-napi_ff_fix.patch
+++ b/
package/madwifi/patches/396-napi_ff_fix.patch
@@
-45,7
+45,7
@@
local_irq_restore(flags);
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
local_irq_restore(flags);
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -120
5,6 +1205
,7 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -120
6,6 +1206
,7 @@ ieee80211_deliver_data(struct ieee80211_
}
}
}
}
diff --git
a/package/madwifi/patches/411-autochannel_multi.patch
b/package/madwifi/patches/411-autochannel_multi.patch
index 1899920a6014ba6663a14a595d8e3aa129ba5499..6e6d678fd49dd17d1c241c2b406f3eb1145d8797 100644
(file)
--- a/
package/madwifi/patches/411-autochannel_multi.patch
+++ b/
package/madwifi/patches/411-autochannel_multi.patch
@@
-183,7
+183,7
@@
ieee80211_stop(vap->iv_dev);
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
ieee80211_stop(vap->iv_dev);
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -277
4,6 +2774
,7 @@ static void
+@@ -277
5,6 +2775
,7 @@ static void
ieee80211_doth_switch_channel(struct ieee80211vap *vap)
{
struct ieee80211com *ic = vap->iv_ic;
ieee80211_doth_switch_channel(struct ieee80211vap *vap)
{
struct ieee80211com *ic = vap->iv_ic;
@@
-191,7
+191,7
@@
IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH,
"%s: Channel switch to %3d (%4d MHz) NOW!\n",
IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH,
"%s: Channel switch to %3d (%4d MHz) NOW!\n",
-@@ -279
6,6 +2797
,9 @@ ieee80211_doth_switch_channel(struct iee
+@@ -279
7,6 +2798
,9 @@ ieee80211_doth_switch_channel(struct iee
ic->ic_curchan = ic->ic_bsschan = vap->iv_csa_chan;
ic->ic_set_channel(ic);
ic->ic_curchan = ic->ic_bsschan = vap->iv_csa_chan;
ic->ic_set_channel(ic);
diff --git
a/package/madwifi/patches/432-netdev_ops.patch
b/package/madwifi/patches/432-netdev_ops.patch
index 5764ab048a650802f66cf722b8837cf95057e24d..915b1a85d8cf3b9d7e5beab6aa8bf96021a46382 100644
(file)
--- a/
package/madwifi/patches/432-netdev_ops.patch
+++ b/
package/madwifi/patches/432-netdev_ops.patch
@@
-170,7
+170,7
@@
http://madwifi-project.org/changeset/4005
#endif
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
#endif
--- a/net80211/ieee80211_input.c
+++ b/net80211/ieee80211_input.c
-@@ -118
7,7 +1187
,11 @@ ieee80211_deliver_data(struct ieee80211_
+@@ -118
8,7 +1188
,11 @@ ieee80211_deliver_data(struct ieee80211_
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 */
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 */
diff --git
a/package/madwifi/patches/441-fix_ibss_node_handling.patch
b/package/madwifi/patches/441-fix_ibss_node_handling.patch
index 5894d68d5239238322561a1646ca0eb39589717d..b12cf6797d055e7b747f58d9181ed51fe6efd93f 100644
(file)
--- a/
package/madwifi/patches/441-fix_ibss_node_handling.patch
+++ b/
package/madwifi/patches/441-fix_ibss_node_handling.patch
@@
-44,7
+44,7
@@
if (dir != IEEE80211_FC1_DIR_NODS) {
IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
wh, "data", "invalid dir 0x%x", dir);
if (dir != IEEE80211_FC1_DIR_NODS) {
IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
wh, "data", "invalid dir 0x%x", dir);
-@@ -355
5,6 +3560
,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -355
6,6 +3561
,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
} else if (vap->iv_opmode == IEEE80211_M_WDS) {
found = 1;
ni = ni_or_null = vap->iv_wdsnode;
} else if (vap->iv_opmode == IEEE80211_M_WDS) {
found = 1;
ni = ni_or_null = vap->iv_wdsnode;
@@
-56,7
+56,7
@@
}
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
}
IEEE80211_UNLOCK_IRQ(vap->iv_ic);
-@@ -368
3,19 +3693
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -368
4,19 +3694
,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
return;
}
vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
return;
}