diff options
author | Vitaly Kuzmichev <vkuzmichev@mvista.com> | 2010-08-13 17:02:29 +0400 |
---|---|---|
committer | Remy Bohmer <linux@bohmer.net> | 2010-09-20 21:57:17 +0200 |
commit | d5292c1647d3a711a05ac99ab2077698b3b4a8a0 (patch) | |
tree | eaa9170717e18596830137b766e1e6def1900ef6 /drivers/usb | |
parent | df559c1d21ba1a9ee0dcec57567907888484d877 (diff) | |
download | u-boot-imx-d5292c1647d3a711a05ac99ab2077698b3b4a8a0.zip u-boot-imx-d5292c1647d3a711a05ac99ab2077698b3b4a8a0.tar.gz u-boot-imx-d5292c1647d3a711a05ac99ab2077698b3b4a8a0.tar.bz2 |
USB-CDC: ethernet error path potential oops fix
Fix potential oops on rare error path.
The patch is based on commit e7b13ec9235b9fded90f826ceeb8c34548631351
(done by David Brownell <david-b@pacbell.net>) from linux-2.6.git.
Description of the issue taken from linux kernel bugzilla:
(https://bugzilla.kernel.org/show_bug.cgi?id=9594)
The potential error can be tracked down as follows:
(1) line 807: let the second conjunct on the "if" statment be false
meaning "dev->status_ep" is null. This means the "if" evaluates
to false.
follow thru the code until...
(2) line 808: usb_ep_disable(dev->status_ep) passes in a null argument,
however "usb_ep_disable" cannot handle that:
(from include/linux/usb/gadget.h)
191 static inline int
192 usb_ep_disable (struct usb_ep *ep)
193 {
194 return ep->ops->disable (ep);
195 }
--
Signed-off-by: Vitaly Kuzmichev <vkuzmichev@mvista.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/ether.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index 8126f76..c601d4a 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -801,7 +801,7 @@ done: /* on error, disable any endpoints */ if (result < 0) { - if (!subset_active(dev)) + if (!subset_active(dev) && dev->status_ep) (void) usb_ep_disable (dev->status_ep); dev->status = NULL; (void) usb_ep_disable (dev->in_ep); |