aboutsummaryrefslogtreecommitdiff
path: root/sys/arm/arm/mem.c
diff options
context:
space:
mode:
authorOlivier Houchard <cognet@FreeBSD.org>2007-02-13 15:35:57 +0000
committerOlivier Houchard <cognet@FreeBSD.org>2007-02-13 15:35:57 +0000
commit4cc9ecf6cbe04af98865c90b689de6b332f531b3 (patch)
treedc8aedee8f2a48f68609c74d9d739570742a3701 /sys/arm/arm/mem.c
parent3d9e8ab862ebe21a2bffcdaa614eda91f2230403 (diff)
downloadsrc-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.c13
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));