Revert r226398 and instead move the allocation of usrbufs after the error check.

Suggested by:	pjd
MFC after:	1 week
This commit is contained in:
brueffer 2011-10-16 17:38:20 +00:00
parent c3b6325d6f
commit 1767d076f9

View File

@ -346,13 +346,11 @@ 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);
usrbufs = malloc(sizeof(void *) * d->nmsgs, M_TEMP, M_ZERO | M_WAITOK);
error = copyin(d->msgs, buf, sizeof(*d->msgs) * d->nmsgs);
if (error) {
free(usrbufs, M_TEMP);
if (error)
break;
}
/* Alloc kernel buffers for userland data, copyin write data */
usrbufs = malloc(sizeof(void *) * d->nmsgs, M_TEMP, M_ZERO | M_WAITOK);
for (i = 0; i < d->nmsgs; i++) {
m = &((struct iic_msg *)buf)[i];
usrbufs[i] = m->buf;