lkml.org 
[lkml]   [2006]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH 1/7] mprotect patch for use by SLIM
From
Date
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 <zohar@us.ibm.com>
Signed-off-by: Kylene Hall <kjhall@us.ibm.com>
---
include/linux/mm.h | 2 ++
mm/mprotect.c | 22 ++++++++++++++++------
2 files changed, 18 insertions(+), 6 deletions(-)
--- linux-2.6.18-rc3/mm/mprotect.c 2006-07-30 01:15:36.000000000 -0500
+++ linux-2.6.18-rc3-working/mm/mprotect.c 2006-08-07 13:11:07.000000000 -0500
@@ -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(&current->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(&current->mm->mmap_sem);
return error;
}
+
+asmlinkage long
+sys_mprotect(unsigned long start, size_t len, unsigned long prot)
+{
+ int ret;
+
+ down_write(&current->mm->mmap_sem);
+ ret = do_mprotect(start, len, prot);
+ up_write(&current->mm->mmap_sem);
+ return ret;
+}
--- linux-2.6.18-rc3/include/linux/mm.h 2006-07-30 01:15:36.000000000 -0500
+++ linux-2.6.18-rc3-working/include/linux/mm.h 2006-08-01 12:18:13.000000000 -0500
@@ -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

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2006-08-23 21:11    [from the cache]
©2003-2011 Jasper Spaans. Advertise on this site