Commit 778ef1e6cbb049c9bcbf405936ee6f2b6e451892

Authored by Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6:
  Staging: w35und: fix usb_control_msg() error handling in wb35_probe()
  Staging: w35und: fix registration with wlan stack
  Staging: panel: fix oops on panel_cleanup_module
  Staging: rtl8187se: Fix oops and memory poison caused by builtin ieee80211.
  Staging: rtl8187se: fix Kconfig dependencies

Showing 5 changed files Side-by-side Diff

drivers/staging/panel/panel.c
... ... @@ -2164,19 +2164,20 @@
2164 2164 if (scan_timer.function != NULL)
2165 2165 del_timer(&scan_timer);
2166 2166  
2167   - if (keypad_enabled)
2168   - misc_deregister(&keypad_dev);
  2167 + if (pprt != NULL) {
  2168 + if (keypad_enabled)
  2169 + misc_deregister(&keypad_dev);
2169 2170  
2170   - if (lcd_enabled) {
2171   - panel_lcd_print("\x0cLCD driver " PANEL_VERSION
2172   - "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
2173   - misc_deregister(&lcd_dev);
2174   - }
  2171 + if (lcd_enabled) {
  2172 + panel_lcd_print("\x0cLCD driver " PANEL_VERSION
  2173 + "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-");
  2174 + misc_deregister(&lcd_dev);
  2175 + }
2175 2176  
2176   - /* TODO: free all input signals */
2177   -
2178   - parport_release(pprt);
2179   - parport_unregister_device(pprt);
  2177 + /* TODO: free all input signals */
  2178 + parport_release(pprt);
  2179 + parport_unregister_device(pprt);
  2180 + }
2180 2181 parport_unregister_driver(&panel_driver);
2181 2182 }
2182 2183  
drivers/staging/rtl8187se/Kconfig
1 1 config RTL8187SE
2 2 tristate "RealTek RTL8187SE Wireless LAN NIC driver"
3 3 depends on PCI
  4 + depends on WIRELESS_EXT && COMPAT_NET_DEV_OPS
4 5 default N
5 6 ---help---
drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c
... ... @@ -234,20 +234,21 @@
234 234 void ieee80211_crypto_deinit(void)
235 235 {
236 236 struct list_head *ptr, *n;
  237 + struct ieee80211_crypto_alg *alg = NULL;
237 238  
238 239 if (hcrypt == NULL)
239 240 return;
240 241  
241   - for (ptr = hcrypt->algs.next, n = ptr->next; ptr != &hcrypt->algs;
242   - ptr = n, n = ptr->next) {
243   - struct ieee80211_crypto_alg *alg =
244   - (struct ieee80211_crypto_alg *) ptr;
245   - list_del(ptr);
246   - printk(KERN_DEBUG "ieee80211_crypt: unregistered algorithm "
247   - "'%s' (deinit)\n", alg->ops->name);
248   - kfree(alg);
  242 + list_for_each_safe(ptr, n, &hcrypt->algs) {
  243 + alg = list_entry(ptr, struct ieee80211_crypto_alg, list);
  244 + if (alg) {
  245 + list_del(ptr);
  246 + printk(KERN_DEBUG
  247 + "ieee80211_crypt: unregistered algorithm '%s' (deinit)\n",
  248 + alg->ops->name);
  249 + kfree(alg);
  250 + }
249 251 }
250   -
251 252 kfree(hcrypt);
252 253 }
253 254  
drivers/staging/rtl8187se/r8180_core.c
... ... @@ -6161,10 +6161,10 @@
6161 6161 {
6162 6162 pci_unregister_driver (&rtl8180_pci_driver);
6163 6163 rtl8180_proc_module_remove();
6164   - ieee80211_crypto_deinit();
6165 6164 ieee80211_crypto_tkip_exit();
6166 6165 ieee80211_crypto_ccmp_exit();
6167 6166 ieee80211_crypto_wep_exit();
  6167 + ieee80211_crypto_deinit();
6168 6168 DMESG("Exiting");
6169 6169 }
6170 6170  
drivers/staging/winbond/wbusb.c
... ... @@ -319,16 +319,18 @@
319 319 struct usb_device *udev = interface_to_usbdev(intf);
320 320 struct wbsoft_priv *priv;
321 321 struct ieee80211_hw *dev;
322   - int err;
  322 + int nr, err;
323 323  
324 324 usb_get_dev(udev);
325 325  
326 326 // 20060630.2 Check the device if it already be opened
327   - err = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ),
328   - 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN,
329   - 0x0, 0x400, &ltmp, 4, HZ*100 );
330   - if (err)
  327 + nr = usb_control_msg(udev, usb_rcvctrlpipe( udev, 0 ),
  328 + 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN,
  329 + 0x0, 0x400, &ltmp, 4, HZ*100 );
  330 + if (nr < 0) {
  331 + err = nr;
331 332 goto error;
  333 + }
332 334  
333 335 ltmp = cpu_to_le32(ltmp);
334 336 if (ltmp) { // Is already initialized?
335 337  
... ... @@ -337,8 +339,10 @@
337 339 }
338 340  
339 341 dev = ieee80211_alloc_hw(sizeof(*priv), &wbsoft_ops);
340   - if (!dev)
  342 + if (!dev) {
  343 + err = -ENOMEM;
341 344 goto error;
  345 + }
342 346  
343 347 priv = dev->priv;
344 348  
345 349  
... ... @@ -369,9 +373,11 @@
369 373 }
370 374  
371 375 dev->extra_tx_headroom = 12; /* FIXME */
372   - dev->flags = 0;
  376 + dev->flags = IEEE80211_HW_SIGNAL_UNSPEC;
  377 + dev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION);
373 378  
374 379 dev->channel_change_time = 1000;
  380 + dev->max_signal = 100;
375 381 dev->queues = 1;
376 382  
377 383 dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &wbsoft_band_2GHz;