mirror of
https://github.com/torvalds/linux.git
synced 2024-11-06 03:51:48 +00:00
staging: ozwpan: Fix crash for race condition.
Do not allocate a port to new device or process URB when its status is yet to be read. This avoids race condition when USB core read hub status a bit late, while new device tries to acquire port. Signed-off-by: Rupesh Gujare <rupesh.gujare@atmel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
acb8d4056a
commit
0a7bfbffbd
@ -685,7 +685,7 @@ struct oz_port *oz_hcd_pd_arrived(void *hpd)
|
||||
struct oz_port *port = &ozhcd->ports[i];
|
||||
|
||||
spin_lock(&port->port_lock);
|
||||
if (!(port->flags & OZ_PORT_F_PRESENT)) {
|
||||
if (!(port->flags & (OZ_PORT_F_PRESENT | OZ_PORT_F_CHANGED))) {
|
||||
oz_acquire_port(port, hpd);
|
||||
spin_unlock(&port->port_lock);
|
||||
break;
|
||||
@ -1818,7 +1818,8 @@ static int oz_hcd_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
|
||||
port = &ozhcd->ports[port_ix];
|
||||
if (port == NULL)
|
||||
return -EPIPE;
|
||||
if ((port->flags & OZ_PORT_F_PRESENT) == 0) {
|
||||
if (!(port->flags & OZ_PORT_F_PRESENT) ||
|
||||
(port->flags & OZ_PORT_F_CHANGED)) {
|
||||
oz_dbg(ON, "Refusing URB port_ix = %d devnum = %d\n",
|
||||
port_ix, urb->dev->devnum);
|
||||
return -EPIPE;
|
||||
|
Loading…
Reference in New Issue
Block a user