usb: musb: avoid NULL pointer dereference
authorFelipe Balbi <balbi@ti.com>
Tue, 25 Feb 2014 16:58:43 +0000 (10:58 -0600)
committerFelipe Balbi <balbi@ti.com>
Wed, 5 Mar 2014 15:44:48 +0000 (09:44 -0600)
instead of relying on the otg pointer, which
can be NULL in certain cases, we can use the
gadget and host pointers we already hold inside
struct musb.

Cc: <stable@vger.kernel.org>
Tested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_core.c

index fc192ad9cc6a60eb4a7f00d124eb0a0d1bca73fe..6c1dd42e5894801a6453d2b83633a63935044905 100644 (file)
@@ -438,7 +438,6 @@ void musb_hnp_stop(struct musb *musb)
 static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
                                u8 devctl)
 {
-       struct usb_otg *otg = musb->xceiv->otg;
        irqreturn_t handled = IRQ_NONE;
 
        dev_dbg(musb->controller, "<== DevCtl=%02x, int_usb=0x%x\n", devctl,
@@ -653,7 +652,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
                                break;
                case OTG_STATE_B_PERIPHERAL:
                        musb_g_suspend(musb);
-                       musb->is_active = otg->gadget->b_hnp_enable;
+                       musb->is_active = musb->g.b_hnp_enable;
                        if (musb->is_active) {
                                musb->xceiv->state = OTG_STATE_B_WAIT_ACON;
                                dev_dbg(musb->controller, "HNP: Setting timer for b_ase0_brst\n");
@@ -669,7 +668,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
                        break;
                case OTG_STATE_A_HOST:
                        musb->xceiv->state = OTG_STATE_A_SUSPEND;
-                       musb->is_active = otg->host->b_hnp_enable;
+                       musb->is_active = musb->hcd->self.b_hnp_enable;
                        break;
                case OTG_STATE_B_HOST:
                        /* Transition to B_PERIPHERAL, see 6.8.2.6 p 44 */