usb: chipidea: udc: fix NULL ptr dereference in isr_setup_status_phase
authorClemens Gruber <clemens.gruber@pqgruber.com>
Mon, 5 Sep 2016 17:29:58 +0000 (19:29 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 24 Sep 2016 08:07:39 +0000 (10:07 +0200)
commit34e255a63b415fbcb36190b9e4f2a24a846cd1fe
tree3c9c9930813385641f0660d78b180dc8676ea158
parent59bc6b85d6a407aae0bb7135ea4da2aa00161f88
usb: chipidea: udc: fix NULL ptr dereference in isr_setup_status_phase

commit 6f3c4fb6d05e63c9c6d8968302491c3a5457be61 upstream.

Problems with the signal integrity of the high speed USB data lines or
noise on reference ground lines can cause the i.MX6 USB controller to
violate USB specs and exhibit unexpected behavior.

It was observed that USBi_UI interrupts were triggered first and when
isr_setup_status_phase was called, ci->status was NULL, which lead to a
NULL pointer dereference kernel panic.

This patch fixes the kernel panic, emits a warning once and returns
-EPIPE to halt the device and let the host get stalled.
It also adds a comment to point people, who are experiencing this issue,
to their USB hardware design.

Signed-off-by: Clemens Gruber <clemens.gruber@pqgruber.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/udc.c