diff options
author | cognet <cognet@FreeBSD.org> | 2007-02-13 15:35:57 +0000 |
---|---|---|
committer | cognet <cognet@FreeBSD.org> | 2007-02-13 15:35:57 +0000 |
commit | 82502fd98c2608a65589b8c904ed6533f2c36ede (patch) | |
tree | dc8aedee8f2a48f68609c74d9d739570742a3701 /sys | |
parent | 3e1e478156719a1795739a5d0a86ddf61b4c738c (diff) | |
download | FreeBSD-src-82502fd98c2608a65589b8c904ed6533f2c36ede.zip FreeBSD-src-82502fd98c2608a65589b8c904ed6533f2c36ede.tar.gz |
Make sure the address is valid before mapping it.
MFC after: 1 week
Diffstat (limited to 'sys')
-rw-r--r-- | sys/arm/arm/mem.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c index e115ffc..8a6df6e 100644 --- a/sys/arm/arm/mem.c +++ b/sys/arm/arm/mem.c @@ -92,8 +92,21 @@ memrw(struct cdev *dev, struct uio *uio, int flags) continue; } if (minor(dev) == CDEV_MINOR_MEM) { + int i; + int address_valid = 0; + v = uio->uio_offset; v &= ~PAGE_MASK; + for (i = 0; dump_avail[i] || dump_avail[i + 1]; + i += 2) { + if (v >= dump_avail[i] && + v < dump_avail[i + 1]) { + address_valid = 1; + break; + } + } + if (!address_valid) + return (EINVAL); pmap_kenter((vm_offset_t)_tmppt, v); o = (int)uio->uio_offset & PAGE_MASK; c = (u_int)(PAGE_SIZE - ((int)iov->iov_base & PAGE_MASK)); |