summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2014-11-30 19:50:53 +0000
committerderaadt <deraadt@openbsd.org>2014-11-30 19:50:53 +0000
commit4d42851367cd05f956cc99a930587b0b179df63d (patch)
tree350172960b303e78dcdea97ce26aea9334c89fe2
parentrestructure libc/string + libc/arch/*/string coperation regarding (diff)
downloadwireguard-openbsd-4d42851367cd05f956cc99a930587b0b179df63d.tar.xz
wireguard-openbsd-4d42851367cd05f956cc99a930587b0b179df63d.zip
panic if the kernel requests W | X pages; ok kettenis
-rw-r--r--sys/uvm/uvm_map.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/uvm/uvm_map.c b/sys/uvm/uvm_map.c
index 87c7df9e35d..f715d8463c6 100644
--- a/sys/uvm/uvm_map.c
+++ b/sys/uvm/uvm_map.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uvm_map.c,v 1.179 2014/11/18 02:37:31 tedu Exp $ */
+/* $OpenBSD: uvm_map.c,v 1.180 2014/11/30 19:50:53 deraadt Exp $ */
/* $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */
/*
@@ -1012,6 +1012,10 @@ uvm_map(struct vm_map *map, vaddr_t *addr, vsize_t sz,
if ((prot & maxprot) != prot)
return EACCES;
+ if (map == kernel_map &&
+ (prot & (PROT_WRITE | PROT_EXEC)) == (PROT_WRITE | PROT_EXEC))
+ panic("uvm_map: kernel map W^X violation requested\n");
+
/*
* Before grabbing the lock, allocate a map entry for later
* use to ensure we don't wait for memory while holding the
@@ -2869,6 +2873,9 @@ uvm_map_protect(struct vm_map *map, vaddr_t start, vaddr_t end,
error = EACCES;
goto out;
}
+ if (map == kernel_map &&
+ (new_prot & (PROT_WRITE | PROT_EXEC)) == (PROT_WRITE | PROT_EXEC))
+ panic("uvm_map_protect: kernel map W^X violation requested\n");
}
/* Fix protections. */