linux/include/linux/usb
Oliver Neukum 2d4cf3d6f3 usbnet: include wait queue head in device structure
[ Upstream commit 14a0d635d1 ]

This fixes a race which happens by freeing an object on the stack.
Quoting Julius:
> The issue is
> that it calls usbnet_terminate_urbs() before that, which temporarily
> installs a waitqueue in dev->wait in order to be able to wait on the
> tasklet to run and finish up some queues. The waiting itself looks
> okay, but the access to 'dev->wait' is totally unprotected and can
> race arbitrarily. I think in this case usbnet_bh() managed to succeed
> it's dev->wait check just before usbnet_terminate_urbs() sets it back
> to NULL. The latter then finishes and the waitqueue_t structure on its
> stack gets overwritten by other functions halfway through the
> wake_up() call in usbnet_bh().

The fix is to just not allocate the data structure on the stack.
As dev->wait is abused as a flag it also takes a runtime PM change
to fix this bug.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Reported-by: Grant Grundler <grundler@google.com>
Tested-by: Grant Grundler <grundler@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-04-14 06:42:18 -07:00
..
association.h
atmel_usba_udc.h
audio-v2.h ALSA: snd-usb: handle raw data format of UAC2 devices 2013-03-18 08:47:13 +01:00
audio.h UAPI: (Scripted) Disintegrate include/linux/usb 2012-10-09 09:49:07 +01:00
c67x00.h
cdc_ncm.h net: cdc_ncm, cdc_mbim: allow user to prefer NCM for backwards compatibility 2013-03-17 11:59:03 -04:00
cdc-wdm.h USB: cdc-wdm: implement IOCTL_WDM_MAX_COMMAND 2013-03-25 13:32:20 -07:00
ch9.h usb: common: introduce usb_state_string() 2013-03-18 11:17:11 +02:00
chipidea.h
composite.h usb: gadget: the start of the configfs interface 2013-04-03 14:43:32 +03:00
dwc3-omap.h usb: dwc3: dwc3-omap: return -EPROBE_DEFER if probe has not yet executed 2013-03-18 11:18:14 +02:00
ehci_def.h USB: EHCI: Tegra: Fix wrong register definition 2012-09-18 17:40:56 +01:00
ehci_pdriver.h USB: EHCI: remove ehci_port_power() routine 2012-10-31 12:48:07 -07:00
ezusb.h USB: ezusb: unexport some functions that aren't being used 2012-10-24 14:19:16 -07:00
functionfs.h UAPI: (Scripted) Disintegrate include/linux/usb 2012-10-09 09:49:07 +01:00
g_hid.h
gadget_configfs.h usb: gadget: the start of the configfs interface 2013-04-03 14:43:32 +03:00
gadget.h Correct typo "supperspeed" to "superspeed". 2013-05-15 17:19:15 +03:00
gpio_vbus.h
hcd.h USB: fix build error when CONFIG_PM_SLEEP isn't enabled 2013-09-26 17:18:12 -07:00
input.h
intel_mid_otg.h
iowarrior.h
irda.h
isp116x.h
isp1301.h
isp1362.h
isp1760.h
m66592.h
msm_hsusb_hw.h
msm_hsusb.h
musb-omap.h
musb-ux500.h usb: phy: ab8500-usb: update irq handling code 2013-03-18 14:41:33 +02:00
musb.h ARM: OMAP2: MUSB: Specify omap4 has mailbox 2013-02-06 11:40:13 -08:00
net2280.h
nop-usb-xceiv.h usb: phy: nop: Add some parameters to platform data 2013-03-18 11:13:54 +02:00
ohci_pdriver.h USB: ohci: allow platform driver to specify the number of ports 2012-10-22 11:23:59 -07:00
omap_control_usb.h usb: omap_control_usb: fix compile warning 2013-02-06 11:40:14 -08:00
omap_usb.h usb: phy: add a new driver for usb3 phy 2013-01-25 13:02:50 +02:00
otg.h usb: otg: move usb_otg_state_string to usb-common.c 2013-03-18 11:18:03 +02:00
phy_companion.h
phy.h usb: phy: return -ENXIO when PHY layer isn't enabled 2013-03-18 11:18:26 +02:00
quirks.h
r8a66597.h
renesas_usbhs.h usb: renesas_usbhs: fixup sparse errors for common.c 2013-04-02 11:42:48 +03:00
rndis_host.h
samsung_usb_phy.h ARM: EXYNOS: Update & move usb-phy types to generic include layer 2013-01-23 13:39:07 +02:00
serial.h USB: serial: add generic wait_until_sent implementation 2013-05-16 17:32:21 -07:00
sl811.h
storage.h
tegra_usb_phy.h usb: phy: tegra: don't call into tegra-ehci directly 2013-04-23 12:50:38 -07:00
tilegx.h
uas.h
ulpi.h usb: ulpi: Define a *otg_ulpi_create no-op 2013-03-20 17:30:40 +02:00
usbnet.h usbnet: include wait queue head in device structure 2014-04-14 06:42:18 -07:00
wusb-wa.h
wusb.h