Commit 75e7766680b4b196073bdc941b8a6570b9f777af

Authored by Herbert Xu

Merge branch 'fixes-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6

Showing 5 changed files Side-by-side Diff

net/ieee80211/ieee80211_tx.c
... ... @@ -144,7 +144,8 @@
144 144 snap->oui[1] = oui[1];
145 145 snap->oui[2] = oui[2];
146 146  
147   - *(u16 *) (data + SNAP_SIZE) = htons(h_proto);
  147 + h_proto = htons(h_proto);
  148 + memcpy(data + SNAP_SIZE, &h_proto, sizeof(u16));
148 149  
149 150 return SNAP_SIZE + sizeof(u16);
150 151 }
net/mac80211/ieee80211.c
... ... @@ -216,6 +216,7 @@
216 216 res = local->ops->start(local_to_hw(local));
217 217 if (res)
218 218 return res;
  219 + ieee80211_hw_config(local);
219 220 }
220 221  
221 222 switch (sdata->type) {
... ... @@ -232,7 +233,6 @@
232 233 netif_tx_unlock_bh(local->mdev);
233 234  
234 235 local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
235   - ieee80211_hw_config(local);
236 236 }
237 237 break;
238 238 case IEEE80211_IF_TYPE_STA:
... ... @@ -334,8 +334,7 @@
334 334 ieee80211_configure_filter(local);
335 335 netif_tx_unlock_bh(local->mdev);
336 336  
337   - local->hw.conf.flags |= IEEE80211_CONF_RADIOTAP;
338   - ieee80211_hw_config(local);
  337 + local->hw.conf.flags &= ~IEEE80211_CONF_RADIOTAP;
339 338 }
340 339 break;
341 340 case IEEE80211_IF_TYPE_STA:
... ... @@ -357,6 +356,11 @@
357 356 cancel_delayed_work(&local->scan_work);
358 357 }
359 358 flush_workqueue(local->hw.workqueue);
  359 +
  360 + sdata->u.sta.flags &= ~IEEE80211_STA_PRIVACY_INVOKED;
  361 + kfree(sdata->u.sta.extra_ie);
  362 + sdata->u.sta.extra_ie = NULL;
  363 + sdata->u.sta.extra_ie_len = 0;
360 364 /* fall through */
361 365 default:
362 366 conf.if_id = dev->ifindex;
... ... @@ -997,7 +997,7 @@
997 997 if (unlikely(!(rx->fc & IEEE80211_FCTL_PROTECTED) &&
998 998 (rx->fc & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA &&
999 999 (rx->fc & IEEE80211_FCTL_STYPE) != IEEE80211_STYPE_NULLFUNC &&
1000   - rx->sdata->drop_unencrypted &&
  1000 + (rx->key || rx->sdata->drop_unencrypted) &&
1001 1001 (rx->sdata->eapol == 0 || !ieee80211_is_eapol(rx->skb)))) {
1002 1002 if (net_ratelimit())
1003 1003 printk(KERN_DEBUG "%s: RX non-WEP frame, but expected "
... ... @@ -265,7 +265,8 @@
265 265 if (ieee80211_wep_decrypt_data(local->wep_rx_tfm, rc4key, klen,
266 266 skb->data + hdrlen + WEP_IV_LEN,
267 267 len)) {
268   - printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
  268 + if (net_ratelimit())
  269 + printk(KERN_DEBUG "WEP decrypt failed (ICV)\n");
269 270 ret = -1;
270 271 }
271 272  
... ... @@ -60,12 +60,8 @@
60 60 static int rfkill_toggle_radio(struct rfkill *rfkill,
61 61 enum rfkill_state state)
62 62 {
63   - int retval;
  63 + int retval = 0;
64 64  
65   - retval = mutex_lock_interruptible(&rfkill->mutex);
66   - if (retval)
67   - return retval;
68   -
69 65 if (state != rfkill->state) {
70 66 retval = rfkill->toggle_radio(rfkill->data, state);
71 67 if (!retval) {
... ... @@ -74,7 +70,6 @@
74 70 }
75 71 }
76 72  
77   - mutex_unlock(&rfkill->mutex);
78 73 return retval;
79 74 }
80 75  
81 76  
82 77  
... ... @@ -158,12 +153,13 @@
158 153 if (!capable(CAP_NET_ADMIN))
159 154 return -EPERM;
160 155  
  156 + if (mutex_lock_interruptible(&rfkill->mutex))
  157 + return -ERESTARTSYS;
161 158 error = rfkill_toggle_radio(rfkill,
162 159 state ? RFKILL_STATE_ON : RFKILL_STATE_OFF);
163   - if (error)
164   - return error;
  160 + mutex_unlock(&rfkill->mutex);
165 161  
166   - return count;
  162 + return error ? error : count;
167 163 }
168 164  
169 165 static ssize_t rfkill_claim_show(struct device *dev,