From 5ea68d541df200d10a373c06f945f98225c2486b Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto Date: Thu, 28 Apr 2011 16:41:07 +0900 Subject: [PATCH] usb: renesas_usbhs: prevent NULL pointer crash usbhs_status_get_each_irq/usbhs_irq_callback_update might be called with mod == NULL Signed-off-by: Kuninori Morimoto Signed-off-by: Greg Kroah-Hartman --- drivers/usb/renesas_usbhs/mod.c | 34 ++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c index 73604a1d6843..d0f5f67e0749 100644 --- a/drivers/usb/renesas_usbhs/mod.c +++ b/drivers/usb/renesas_usbhs/mod.c @@ -179,15 +179,17 @@ static void usbhs_status_get_each_irq(struct usbhs_priv *priv, state->intsts0 = usbhs_read(priv, INTSTS0); state->intsts1 = usbhs_read(priv, INTSTS1); - state->brdysts = usbhs_read(priv, BRDYSTS); - state->nrdysts = usbhs_read(priv, NRDYSTS); - state->bempsts = usbhs_read(priv, BEMPSTS); - state->dvstctr = usbhs_read(priv, DVSTCTR); /* mask */ - state->bempsts &= mod->irq_bempsts; - state->brdysts &= mod->irq_brdysts; + if (mod) { + state->brdysts = usbhs_read(priv, BRDYSTS); + state->nrdysts = usbhs_read(priv, NRDYSTS); + state->bempsts = usbhs_read(priv, BEMPSTS); + + state->bempsts &= mod->irq_bempsts; + state->brdysts &= mod->irq_brdysts; + } } /* @@ -259,17 +261,19 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod) * but "mod->irq_dev_state" will be called. */ - if (mod->irq_ctrl_stage) - intenb0 |= CTRE; + if (mod) { + if (mod->irq_ctrl_stage) + intenb0 |= CTRE; - if (mod->irq_empty && mod->irq_bempsts) { - usbhs_write(priv, BEMPENB, mod->irq_bempsts); - intenb0 |= BEMPE; - } + if (mod->irq_empty && mod->irq_bempsts) { + usbhs_write(priv, BEMPENB, mod->irq_bempsts); + intenb0 |= BEMPE; + } - if (mod->irq_ready && mod->irq_brdysts) { - usbhs_write(priv, BRDYENB, mod->irq_brdysts); - intenb0 |= BRDYE; + if (mod->irq_ready && mod->irq_brdysts) { + usbhs_write(priv, BRDYENB, mod->irq_brdysts); + intenb0 |= BRDYE; + } } usbhs_write(priv, INTENB0, intenb0); -- 2.20.1