Files
kernel_amazon_mt8127-common/include/linux
Oliver Neukum 2d4cf3d6f3 usbnet: include wait queue head in device structure
[ Upstream commit 14a0d635d18d0fb552dcc979d6d25106e6541f2e ]

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
..
2013-05-17 14:31:05 -04:00
2013-07-25 14:07:23 -07:00
2013-12-04 10:56:22 -08:00
2013-05-07 19:46:02 -07:00
2013-12-08 07:29:27 -08:00
2013-05-01 16:36:22 +05:30
2013-07-28 16:30:11 -07:00
2013-05-07 18:38:27 -07:00
2013-10-13 16:08:28 -07:00
2014-04-03 12:01:05 -07:00
2013-07-28 16:30:05 -07:00
2013-10-13 16:08:35 -07:00
2014-04-03 12:01:05 -07:00
2013-07-21 18:21:29 -07:00
2014-01-15 15:28:47 -08:00
2013-05-04 14:47:26 -04:00
2013-05-28 11:05:08 +02:00
2014-02-13 13:47:59 -08:00
2013-08-20 08:43:02 -07:00
2013-07-28 16:29:55 -07:00