mprotect patch for use by SLIM
Subsystems (3)
PATCH 1/7 mprotect patch for use by SLIM
This small patch makes mprotect available for use by SLIM for write revocation.
Updated to allow the usage locking to work properly.
Signed-off-by Mimi Zohar <[email protected]>
Signed-off-by Kylene Hall <[email protected]>
--- include/linux/mm.h | 2 ++ mm/mprotect.c | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-)
mm/mprotect.c +16 -6
@@ -19,6 +19,7 @@#include <linux/mempolicy.h> #include <linux/personality.h> #include <linux/syscalls.h> +#include <linux/module.h> #include <linux/swap.h> #include <linux/swapops.h> #include <asm/uaccess.h>
@@ -202,9 +203,10 @@ fail:vm_unacct_memory (charged);return error; } - -asmlinkage long -sys_mprotect (unsigned long start,size_t len,unsigned long prot) +/* +* Call holding the current->mm->mmap_sem for writing +*/ +int do_mprotect (unsigned long start,size_t len,unsigned long prot) {unsigned long vm_flags, nstart, end, tmp, reqprot;struct vm_area_struct *vma, *prev;
@@ -234,8 +236,6 @@ sys_mprotect(unsigned long start, size_t vm_flags =calc_vm_prot_bits (prot); -down_write (¤t->mm->mmap_sem); - vma =find_vma_prev (current->mm, start, &prev); error = -ENOMEM ;if (!vma)
@@ -298,6 +298,16 @@ sys_mprotect(unsigned long start, size_t } } out: -up_write (¤t->mm->mmap_sem);return error; } + +asmlinkage long +sys_mprotect (unsigned long start,size_t len,unsigned long prot) +{ +int ret; + +down_write (¤t->mm->mmap_sem); + ret =do_mprotect (start, len, prot); +up_write (¤t->mm->mmap_sem); +return ret; +}
include/linux/mm.h +2 -0
@@ -137,6 +137,8 @@ extern unsigned int kobjsize(const void#define VM_EXEC 0x00000004#define VM_SHARED 0x00000008 +extern int do_mprotect (unsigned long start,size_t len,unsigned long prot); +/* mprotect() hardcodes VM_MAYREAD >> 4 == VM_READ, and so for r/w/x bits. */ #define VM_MAYREAD 0x00000010/* limits for mprotect() etc */ #define VM_MAYWRITE 0x00000020