add a fix for skb_put_over in beacon handling code
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8325 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
c29e126571
commit
9f6c6d14ec
|
@ -0,0 +1,42 @@
|
||||||
|
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
|
||||||
|
|
||||||
|
Index: trunk/net80211/ieee80211_beacon.c
|
||||||
|
===================================================================
|
||||||
|
--- trunk/net80211/ieee80211_beacon.c (revision 2631)
|
||||||
|
+++ trunk/net80211/ieee80211_beacon.c (working copy)
|
||||||
|
@@ -305,13 +305,17 @@
|
||||||
|
*/
|
||||||
|
c = ieee80211_doth_findchan(vap, ic->ic_chanchange_chan);
|
||||||
|
if (c == NULL) {
|
||||||
|
+ /*
|
||||||
|
+ * The channel we have been requested to change to
|
||||||
|
+ * is not valid. Drop the channel switch annoucement
|
||||||
|
+ * from the beacon and don't change channel.
|
||||||
|
+ */
|
||||||
|
IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH,
|
||||||
|
- "%s: find channel failure\n", __func__);
|
||||||
|
- IEEE80211_UNLOCK_IRQ_EARLY(ic);
|
||||||
|
- return 0;
|
||||||
|
+ "%s: find channel failure\n",
|
||||||
|
+ __func__);
|
||||||
|
+ } else {
|
||||||
|
+ ic->ic_bsschan = c;
|
||||||
|
}
|
||||||
|
- ic->ic_bsschan = c;
|
||||||
|
-
|
||||||
|
skb_pull(skb, sizeof(struct ieee80211_frame));
|
||||||
|
skb_trim(skb, 0);
|
||||||
|
frm = skb->data;
|
||||||
|
@@ -321,8 +325,10 @@
|
||||||
|
vap->iv_flags &= ~IEEE80211_F_CHANSWITCH;
|
||||||
|
ic->ic_flags &= ~IEEE80211_F_CHANSWITCH;
|
||||||
|
|
||||||
|
- /* NB: only for the first VAP to get here */
|
||||||
|
- if (ic->ic_curchan != c) {
|
||||||
|
+ /* NB: only for the first VAP to get here, and we have a valid
|
||||||
|
+ * new channel to change to.
|
||||||
|
+ */
|
||||||
|
+ if (c && ic->ic_curchan != c) {
|
||||||
|
ic->ic_curchan = c;
|
||||||
|
ic->ic_set_channel(ic);
|
||||||
|
}
|
Loading…
Reference in New Issue