summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorcognet <cognet@FreeBSD.org>2007-02-13 15:35:57 +0000
committercognet <cognet@FreeBSD.org>2007-02-13 15:35:57 +0000
commit82502fd98c2608a65589b8c904ed6533f2c36ede (patch)
treedc8aedee8f2a48f68609c74d9d739570742a3701 /sys
parent3e1e478156719a1795739a5d0a86ddf61b4c738c (diff)
downloadFreeBSD-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.c13
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));
OpenPOWER on IntegriCloud