--- src/sys/emulation/linux/linux_file.c 2005/08/27 20:23:05 1.24 +++ src/sys/emulation/linux/linux_file.c 2006/04/26 17:42:52 1.25 @@ -817,8 +817,10 @@ linux_pread(struct linux_pread_args *uap auio.uio_segflg = UIO_USERSPACE; auio.uio_td = td; - error = kern_readv(uap->fd, &auio, FOF_OFFSET, &uap->sysmsg_result); - + if (auio.uio_resid < 0) + error = EINVAL; + else + error = kern_readv(uap->fd, &auio, FOF_OFFSET, &uap->sysmsg_result); return(error); } @@ -840,7 +842,10 @@ linux_pwrite(struct linux_pwrite_args *u auio.uio_segflg = UIO_USERSPACE; auio.uio_td = td; - error = kern_writev(uap->fd, &auio, FOF_OFFSET, &uap->sysmsg_result); + if (auio.uio_resid < 0) + error = EINVAL; + else + error = kern_writev(uap->fd, &auio, FOF_OFFSET, &uap->sysmsg_result); return(error); }