forked from Minki/linux
[PATCH] USB: ehci: fix bogus alteration of a local variable
In a rare and all-but-unused path, the EHCI driver could reuse a variable in a way that'd make trouble. Specifically, if the first root hub port gets an overcurrent event (rare) during a remote wakeup scenario (all but unused in today's Linux, except for folk working with suspend-to-RAM and similar sleep states), that would look like a fatal error which would shut down the controller. Fix by not reusing that variable. Spotted by Per Hallsmark <saxofon@musiker.nu> Fixes http://bugzilla.kernel.org/show_bug.cgi?id=6661 Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
69de51fdda
commit
b972b68c39
@ -625,10 +625,11 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd, struct pt_regs *regs)
|
|||||||
writel (status | CMD_RUN, &ehci->regs->command);
|
writel (status | CMD_RUN, &ehci->regs->command);
|
||||||
|
|
||||||
while (i--) {
|
while (i--) {
|
||||||
status = readl (&ehci->regs->port_status [i]);
|
int pstatus = readl (&ehci->regs->port_status [i]);
|
||||||
if (status & PORT_OWNER)
|
|
||||||
|
if (pstatus & PORT_OWNER)
|
||||||
continue;
|
continue;
|
||||||
if (!(status & PORT_RESUME)
|
if (!(pstatus & PORT_RESUME)
|
||||||
|| ehci->reset_done [i] != 0)
|
|| ehci->reset_done [i] != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user