diff options
author | Warner Losh <imp@FreeBSD.org> | 2006-09-06 19:46:02 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2006-09-06 19:46:02 +0000 |
commit | 14ca3cd6ffd646f309c13fa15c88ac05941b28ef (patch) | |
tree | d60d97145ddf394e4ee67f39eabe9ca0a8e39f4b /sys/dev/iicbus | |
parent | 6fbfd5825fdf8dcd8f3fcd51c1f92058fa898944 (diff) | |
download | src-14ca3cd6ffd646f309c13fa15c88ac05941b28ef.tar.gz src-14ca3cd6ffd646f309c13fa15c88ac05941b28ef.zip |
MFp4: check the return value of malloc and report an error when invalid.
Notes
Notes:
svn path=/head/; revision=162072
Diffstat (limited to 'sys/dev/iicbus')
-rw-r--r-- | sys/dev/iicbus/iic.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/iicbus/iic.c b/sys/dev/iicbus/iic.c index b50d2e087204..038a8e8c12f3 100644 --- a/sys/dev/iicbus/iic.c +++ b/sys/dev/iicbus/iic.c @@ -282,6 +282,10 @@ iicioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, struct thread *t break; } buf = malloc((unsigned long)s->count, M_TEMP, M_WAITOK); + if (buf == NULL) { + error = ENOMEM; + break; + } error = copyin(s->buf, buf, s->count); if (error) break; @@ -294,6 +298,10 @@ iicioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, struct thread *t break; } buf = malloc((unsigned long)s->count, M_TEMP, M_WAITOK); + if (buf == NULL) { + error = ENOMEM; + break; + } error = iicbus_read(parent, buf, s->count, &count, s->last, 10); if (error) break; @@ -302,7 +310,15 @@ iicioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags, struct thread *t case I2CRDWR: buf = malloc(sizeof(*d->msgs) * d->nmsgs, M_TEMP, M_WAITOK); + if (buf == NULL) { + error = ENOMEM; + break; + } usrbufs = malloc(sizeof(void *) * d->nmsgs, M_TEMP, M_ZERO | M_WAITOK); + if (usrbufs == NULL) { + error = ENOMEM; + break; + } error = copyin(d->msgs, buf, sizeof(*d->msgs) * d->nmsgs); if (error) break; |