From 26dcf4f76c33462b59103acd0432e0e69a3b1037 Mon Sep 17 00:00:00 2001 From: deraadt Date: Tue, 31 Aug 2010 16:38:42 +0000 Subject: In xxactivate() DVACT_DEACTIVATE, when calling a series of config_deactivate() for sub-devices, return the last error return value instead of |'ing the failures together and creating some value that is non-0 (bravo!) but potentially loses the specific error value... --- sys/dev/usb/usb.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'sys/dev/usb/usb.c') diff --git a/sys/dev/usb/usb.c b/sys/dev/usb/usb.c index 21a8a07fbef..6d9127df792 100644 --- a/sys/dev/usb/usb.c +++ b/sys/dev/usb/usb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usb.c,v 1.62 2009/11/09 17:53:39 nicm Exp $ */ +/* $OpenBSD: usb.c,v 1.63 2010/08/31 16:38:42 deraadt Exp $ */ /* $NetBSD: usb.c,v 1.77 2003/01/01 00:10:26 thorpej Exp $ */ /* @@ -790,18 +790,20 @@ usb_activate(struct device *self, int act) { struct usb_softc *sc = (struct usb_softc *)self; usbd_device_handle dev = sc->sc_port.device; - int i, rv = 0; + int i, rv = 0, r; switch (act) { case DVACT_ACTIVATE: break; - case DVACT_DEACTIVATE: sc->sc_dying = 1; if (dev != NULL && dev->cdesc != NULL && dev->subdevs != NULL) { - for (i = 0; dev->subdevs[i]; i++) - rv |= config_deactivate(dev->subdevs[i]); + for (i = 0; dev->subdevs[i]; i++) { + r = config_deactivate(dev->subdevs[i]); + if (r) + rv = r; + } } break; } -- cgit v1.2.3-59-g8ed1b