diff options
author | imp <imp@FreeBSD.org> | 2008-08-23 07:38:00 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2008-08-23 07:38:00 +0000 |
commit | ea74865077bcecee86c866aaedeac929ce99b1fd (patch) | |
tree | 88666ccee3162dea2f0d4b6a5ac3f2b0c621d98e /sys/dev/iicbus | |
parent | 0f3a30fb7ac195b316b1f584672db14e51cad9cc (diff) | |
download | FreeBSD-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.
Diffstat (limited to 'sys/dev/iicbus')
-rw-r--r-- | sys/dev/iicbus/iiconf.c | 7 |
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++) { |