Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/i386/mem.c
Show First 20 Lines • Show All 86 Lines • ▼ Show 20 Lines | memrw(struct cdev *dev, struct uio *uio, int flags) | ||||
struct iovec *iov; | struct iovec *iov; | ||||
int error = 0; | int error = 0; | ||||
vm_offset_t addr; | vm_offset_t addr; | ||||
if (dev2unit(dev) != CDEV_MINOR_MEM && dev2unit(dev) != CDEV_MINOR_KMEM) | if (dev2unit(dev) != CDEV_MINOR_MEM && dev2unit(dev) != CDEV_MINOR_KMEM) | ||||
return EIO; | return EIO; | ||||
if (dev2unit(dev) == CDEV_MINOR_KMEM && uio->uio_resid > 0) { | if (dev2unit(dev) == CDEV_MINOR_KMEM && uio->uio_resid > 0) { | ||||
if (uio->uio_offset < (vm_offset_t)VADDR(PTDPTDI, 0)) | |||||
return (EFAULT); | |||||
if (!kernacc((caddr_t)(int)uio->uio_offset, uio->uio_resid, | if (!kernacc((caddr_t)(int)uio->uio_offset, uio->uio_resid, | ||||
uio->uio_rw == UIO_READ ? VM_PROT_READ : VM_PROT_WRITE)) | uio->uio_rw == UIO_READ ? VM_PROT_READ : VM_PROT_WRITE)) | ||||
return (EFAULT); | return (EFAULT); | ||||
} | } | ||||
while (uio->uio_resid > 0 && error == 0) { | while (uio->uio_resid > 0 && error == 0) { | ||||
iov = uio->uio_iov; | iov = uio->uio_iov; | ||||
if (iov->iov_len == 0) { | if (iov->iov_len == 0) { | ||||
▲ Show 20 Lines • Show All 131 Lines • Show Last 20 Lines |