summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2008-08-23 07:38:00 +0000
committerimp <imp@FreeBSD.org>2008-08-23 07:38:00 +0000
commitea74865077bcecee86c866aaedeac929ce99b1fd (patch)
tree88666ccee3162dea2f0d4b6a5ac3f2b0c621d98e
parent0f3a30fb7ac195b316b1f584672db14e51cad9cc (diff)
downloadFreeBSD-src-ea74865077bcecee86c866aaedeac929ce99b1fd.zip
FreeBSD-src-ea74865077bcecee86c866aaedeac929ce99b1fd.tar.gz
Handle errors from device_get_chidlren.
Free child list when there's more children than we expected.
-rw-r--r--sys/dev/iicbus/iiconf.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/dev/iicbus/iiconf.c b/sys/dev/iicbus/iiconf.c
index bf7f453..1610b35 100644
--- a/sys/dev/iicbus/iiconf.c
+++ b/sys/dev/iicbus/iiconf.c
@@ -366,9 +366,12 @@ iicbus_transfer_gen(device_t dev, struct iic_msg *msgs, uint32_t nmsgs)
int i, error, lenread, lenwrote, nkid;
device_t *children, bus;
- device_get_children(dev, &children, &nkid);
- if (nkid != 1)
+ if ((error = device_get_children(dev, &children, &nkid)) != 0)
+ return (error);
+ if (nkid != 1) {
+ free(children, M_TEMP);
return (EIO);
+ }
bus = children[0];
free(children, M_TEMP);
for (i = 0, error = 0; i < nmsgs && error == 0; i++) {
OpenPOWER on IntegriCloud