static int pollscan (struct proc *, struct pollfd *, u_int, int *);
static int selscan (struct proc *, fd_mask **, fd_mask **,
int, int *);
-static int dofileread(int, struct file *, struct uio *, int, int *);
-static int dofilewrite(int, struct file *, struct uio *, int, int *);
+static int dofileread(int, struct file *, struct uio *, int, size_t *);
+static int dofilewrite(int, struct file *, struct uio *, int, size_t *);
/*
* Read system call.
struct iovec aiov;
int error;
+ if ((ssize_t)uap->nbyte < 0)
+ error = EINVAL;
+
aiov.iov_base = uap->buf;
aiov.iov_len = uap->nbyte;
auio.uio_iov = &aiov;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_td = td;
- if (auio.uio_resid < 0)
- error = EINVAL;
- else
- error = kern_preadv(uap->fd, &auio, 0, &uap->sysmsg_result);
+ error = kern_preadv(uap->fd, &auio, 0, &uap->sysmsg_szresult);
return(error);
}
int error;
int flags;
+ if ((ssize_t)uap->nbyte < 0)
+ return(EINVAL);
+
aiov.iov_base = uap->buf;
aiov.iov_len = uap->nbyte;
auio.uio_iov = &aiov;
if (uap->offset != (off_t)-1)
flags |= O_FOFFSET;
- if (auio.uio_resid < 0)
- error = EINVAL;
- else
- error = kern_preadv(uap->fd, &auio, flags, &uap->sysmsg_result);
+ error = kern_preadv(uap->fd, &auio, flags, &uap->sysmsg_szresult);
return(error);
}
auio.uio_segflg = UIO_USERSPACE;
auio.uio_td = td;
- error = kern_preadv(uap->fd, &auio, 0, &uap->sysmsg_result);
+ error = kern_preadv(uap->fd, &auio, 0, &uap->sysmsg_szresult);
iovec_free(&iov, aiov);
return (error);
if (uap->offset != (off_t)-1)
flags |= O_FOFFSET;
- error = kern_preadv(uap->fd, &auio, flags, &uap->sysmsg_result);
+ error = kern_preadv(uap->fd, &auio, flags, &uap->sysmsg_szresult);
iovec_free(&iov, aiov);
return(error);
* MPSAFE
*/
int
-kern_preadv(int fd, struct uio *auio, int flags, int *res)
+kern_preadv(int fd, struct uio *auio, int flags, size_t *res)
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
return (EBADF);
if (flags & O_FOFFSET && fp->f_type != DTYPE_VNODE) {
error = ESPIPE;
- } else if (auio->uio_resid < 0) {
- error = EINVAL;
} else {
error = dofileread(fd, fp, auio, flags, res);
}
* MPALMOSTSAFE - ktrace needs help
*/
static int
-dofileread(int fd, struct file *fp, struct uio *auio, int flags, int *res)
+dofileread(int fd, struct file *fp, struct uio *auio, int flags, size_t *res)
{
struct thread *td = curthread;
int error;
- int len;
+ size_t len;
#ifdef KTRACE
struct iovec *ktriov = NULL;
struct uio ktruio;
struct iovec aiov;
int error;
+ if ((ssize_t)uap->nbyte < 0)
+ error = EINVAL;
+
aiov.iov_base = (void *)(uintptr_t)uap->buf;
aiov.iov_len = uap->nbyte;
auio.uio_iov = &aiov;
auio.uio_segflg = UIO_USERSPACE;
auio.uio_td = td;
- if (auio.uio_resid < 0)
- error = EINVAL;
- else
- error = kern_pwritev(uap->fd, &auio, 0, &uap->sysmsg_result);
+ error = kern_pwritev(uap->fd, &auio, 0, &uap->sysmsg_szresult);
return(error);
}
int error;
int flags;
+ if ((ssize_t)uap->nbyte < 0)
+ error = EINVAL;
+
aiov.iov_base = (void *)(uintptr_t)uap->buf;
aiov.iov_len = uap->nbyte;
auio.uio_iov = &aiov;
flags = uap->flags & O_FMASK;
if (uap->offset != (off_t)-1)
flags |= O_FOFFSET;
-
- if (auio.uio_resid < 0)
- error = EINVAL;
- else
- error = kern_pwritev(uap->fd, &auio, flags, &uap->sysmsg_result);
-
+ error = kern_pwritev(uap->fd, &auio, flags, &uap->sysmsg_szresult);
return(error);
}
auio.uio_segflg = UIO_USERSPACE;
auio.uio_td = td;
- error = kern_pwritev(uap->fd, &auio, 0, &uap->sysmsg_result);
+ error = kern_pwritev(uap->fd, &auio, 0, &uap->sysmsg_szresult);
iovec_free(&iov, aiov);
return (error);
if (uap->offset != (off_t)-1)
flags |= O_FOFFSET;
- error = kern_pwritev(uap->fd, &auio, flags, &uap->sysmsg_result);
+ error = kern_pwritev(uap->fd, &auio, flags, &uap->sysmsg_szresult);
iovec_free(&iov, aiov);
return(error);
* MPSAFE
*/
int
-kern_pwritev(int fd, struct uio *auio, int flags, int *res)
+kern_pwritev(int fd, struct uio *auio, int flags, size_t *res)
{
struct thread *td = curthread;
struct proc *p = td->td_proc;
* MPALMOSTSAFE - ktrace needs help
*/
static int
-dofilewrite(int fd, struct file *fp, struct uio *auio, int flags, int *res)
+dofilewrite(int fd, struct file *fp, struct uio *auio, int flags, size_t *res)
{
struct thread *td = curthread;
struct lwp *lp = td->td_lwp;
int error;
- int len;
+ size_t len;
#ifdef KTRACE
struct iovec *ktriov = NULL;
struct uio ktruio;
}
if ((com & IOC_IN) != 0) {
if (size != 0) {
- error = copyin(uspc_data, data, (u_int)size);
+ error = copyin(uspc_data, data, (size_t)size);
if (error) {
if (memp != NULL)
kfree(memp, M_IOCTLOPS);
* Zero the buffer so the user always
* gets back something deterministic.
*/
- bzero(data, size);
+ bzero(data, (size_t)size);
} else if ((com & IOC_VOID) != 0) {
*(caddr_t *)data = uspc_data;
}
* already set and checked above.
*/
if (error == 0 && (com & IOC_OUT) != 0 && size != 0)
- error = copyout(data, uspc_data, (u_int)size);
+ error = copyout(data, uspc_data, (size_t)size);
break;
}
if (memp != NULL)