diff options
author | loos <loos@FreeBSD.org> | 2015-01-30 14:09:07 +0000 |
---|---|---|
committer | loos <loos@FreeBSD.org> | 2015-01-30 14:09:07 +0000 |
commit | aef5f9f1b801cc4daa87bcea3d98b46b639ffc5c (patch) | |
tree | 1ede8b131bb3c28cebaf9a04cda7634566657e9a | |
parent | e4bf748e4c19149c9289f4e058de7cb0e2f7a044 (diff) | |
download | FreeBSD-src-aef5f9f1b801cc4daa87bcea3d98b46b639ffc5c.zip FreeBSD-src-aef5f9f1b801cc4daa87bcea3d98b46b639ffc5c.tar.gz |
Do not leak the OFW memory when the result does not satisfy our alignment
requirement.
While here, fix style(9) issues.
-rw-r--r-- | sys/dev/ofw/openfirm.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/ofw/openfirm.c b/sys/dev/ofw/openfirm.c index 5bcf3d1..7da5e58 100644 --- a/sys/dev/ofw/openfirm.c +++ b/sys/dev/ofw/openfirm.c @@ -459,11 +459,16 @@ OF_getencprop_alloc(phandle_t package, const char *name, int elsz, void **buf) int i; retval = OF_getprop_alloc(package, name, elsz, buf); - if (retval == -1 || retval*elsz % 4 != 0) + if (retval == -1) return (-1); + if (retval * elsz % 4 != 0) { + free(*buf, M_OFWPROP); + *buf = NULL; + return (-1); + } cell = *buf; - for (i = 0; i < retval*elsz/4; i++) + for (i = 0; i < retval * elsz / 4; i++) cell[i] = be32toh(cell[i]); return (retval); |