Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/subr_uio.c
Show First 20 Lines • Show All 380 Lines • ▼ Show 20 Lines | if (error) { | ||||
return (error); | return (error); | ||||
} | } | ||||
uio->uio_iov = iov; | uio->uio_iov = iov; | ||||
uio->uio_iovcnt = iovcnt; | uio->uio_iovcnt = iovcnt; | ||||
uio->uio_segflg = UIO_USERSPACE; | uio->uio_segflg = UIO_USERSPACE; | ||||
uio->uio_offset = -1; | uio->uio_offset = -1; | ||||
uio->uio_resid = 0; | uio->uio_resid = 0; | ||||
for (i = 0; i < iovcnt; i++) { | for (i = 0; i < iovcnt; i++) { | ||||
if (iov->iov_len > IOSIZE_MAX - uio->uio_resid) { | if (iov->iov_len > SSIZE_MAX || | ||||
iov->iov_len > IOSIZE_MAX - uio->uio_resid) { | |||||
free(uio, M_IOV); | free(uio, M_IOV); | ||||
return (EINVAL); | return (EINVAL); | ||||
} | } | ||||
uio->uio_resid += iov->iov_len; | uio->uio_resid += iov->iov_len; | ||||
iov++; | iov++; | ||||
} | } | ||||
*uiop = uio; | *uiop = uio; | ||||
return (0); | return (0); | ||||
▲ Show 20 Lines • Show All 117 Lines • Show Last 20 Lines |