aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2006-09-06 19:46:02 +0000
committerWarner Losh <imp@FreeBSD.org>2006-09-06 19:46:02 +0000
commit14ca3cd6ffd646f309c13fa15c88ac05941b28ef (patch)
treed60d97145ddf394e4ee67f39eabe9ca0a8e39f4b
parent6fbfd5825fdf8dcd8f3fcd51c1f92058fa898944 (diff)
downloadsrc-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
-rw-r--r--sys/dev/iicbus/iic.c16
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;