Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5ea68d54 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Greg Kroah-Hartman
Browse files

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 6e267da8
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -179,16 +179,18 @@ static void usbhs_status_get_each_irq(struct usbhs_priv *priv,
	state->intsts0 = usbhs_read(priv, INTSTS0);
	state->intsts1 = usbhs_read(priv, INTSTS1);

	state->dvstctr = usbhs_read(priv, DVSTCTR);

	/* mask */
	if (mod) {
		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;
	}
}

/*
 *		interrupt
@@ -259,6 +261,7 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)
	 * but "mod->irq_dev_state" will be called.
	 */

	if (mod) {
		if (mod->irq_ctrl_stage)
			intenb0 |= CTRE;

@@ -271,6 +274,7 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)
			usbhs_write(priv, BRDYENB, mod->irq_brdysts);
			intenb0 |= BRDYE;
		}
	}

	usbhs_write(priv, INTENB0, intenb0);
}