diff options
author | 2014-11-30 19:50:53 +0000 | |
---|---|---|
committer | 2014-11-30 19:50:53 +0000 | |
commit | 4d42851367cd05f956cc99a930587b0b179df63d (patch) | |
tree | 350172960b303e78dcdea97ce26aea9334c89fe2 | |
parent | restructure libc/string + libc/arch/*/string coperation regarding (diff) | |
download | wireguard-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.c | 9 |
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. */ |