diff options
author | Olivier Houchard <cognet@FreeBSD.org> | 2007-02-13 15:35:57 +0000 |
---|---|---|
committer | Olivier Houchard <cognet@FreeBSD.org> | 2007-02-13 15:35:57 +0000 |
commit | 4cc9ecf6cbe04af98865c90b689de6b332f531b3 (patch) | |
tree | dc8aedee8f2a48f68609c74d9d739570742a3701 /sys/arm/arm/mem.c | |
parent | 3d9e8ab862ebe21a2bffcdaa614eda91f2230403 (diff) | |
download | src-4cc9ecf6cbe04af98865c90b689de6b332f531b3.tar.gz src-4cc9ecf6cbe04af98865c90b689de6b332f531b3.zip |
Make sure the address is valid before mapping it.
MFC after: 1 week
Notes
Notes:
svn path=/head/; revision=166688
Diffstat (limited to 'sys/arm/arm/mem.c')
-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 e115ffc76310..8a6df6ed1213 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)); |