USB: OHCI: Don't mark EDs as ED_OPER if scheduling fails
authorMichał Pecio <michal.pecio@gmail.com>
Tue, 7 Jun 2016 10:34:45 +0000 (12:34 +0200)
committerSasha Levin <alexander.levin@verizon.com>
Sat, 20 Aug 2016 03:08:45 +0000 (23:08 -0400)
commitc65b5c9c0085bab46706f35c4889dd03cf2b0c08
tree0cfec20de72148441dd92f539cfe81b19cbce19c
parent6412c3ae6b415ca83264a2c11e24bfb63cd74629
USB: OHCI: Don't mark EDs as ED_OPER if scheduling fails

[ Upstream commit c66f59ee5050447b3da92d36f5385a847990a894 ]

Since ed_schedule begins with marking the ED as "operational",
the ED may be left in such state even if scheduling actually
fails.

This allows future submission attempts to smuggle this ED to the
hardware behind the scheduler's back and without linking it to
the ohci->eds_in_use list.

The former causes bandwidth saturation and data loss on isoc
endpoints, the latter crashes the kernel when attempt is made
to unlink such ED from this list.

Fix ed_schedule to update ED state only on successful return.

Signed-off-by: Michal Pecio <michal.pecio@gmail.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
drivers/usb/host/ohci-q.c