add a fix for skb_put_over in beacon handling code
[openwrt/svn-archive/archive.git] / package / madwifi / patches / 130-chanswitch_beacon_fix_PR_1477.patch
1 Signed-off-by: Andrew Lunn <andrew@lunn.ch>
2
3 Index: trunk/net80211/ieee80211_beacon.c
4 ===================================================================
5 --- trunk/net80211/ieee80211_beacon.c (revision 2631)
6 +++ trunk/net80211/ieee80211_beacon.c (working copy)
7 @@ -305,13 +305,17 @@
8 */
9 c = ieee80211_doth_findchan(vap, ic->ic_chanchange_chan);
10 if (c == NULL) {
11 + /*
12 + * The channel we have been requested to change to
13 + * is not valid. Drop the channel switch annoucement
14 + * from the beacon and don't change channel.
15 + */
16 IEEE80211_DPRINTF(vap, IEEE80211_MSG_DOTH,
17 - "%s: find channel failure\n", __func__);
18 - IEEE80211_UNLOCK_IRQ_EARLY(ic);
19 - return 0;
20 + "%s: find channel failure\n",
21 + __func__);
22 + } else {
23 + ic->ic_bsschan = c;
24 }
25 - ic->ic_bsschan = c;
26 -
27 skb_pull(skb, sizeof(struct ieee80211_frame));
28 skb_trim(skb, 0);
29 frm = skb->data;
30 @@ -321,8 +325,10 @@
31 vap->iv_flags &= ~IEEE80211_F_CHANSWITCH;
32 ic->ic_flags &= ~IEEE80211_F_CHANSWITCH;
33
34 - /* NB: only for the first VAP to get here */
35 - if (ic->ic_curchan != c) {
36 + /* NB: only for the first VAP to get here, and we have a valid
37 + * new channel to change to.
38 + */
39 + if (c && ic->ic_curchan != c) {
40 ic->ic_curchan = c;
41 ic->ic_set_channel(ic);
42 }