2005-05-07 08:25:33

by Hyok S. Choi

[permalink] [raw]
Subject: [PATCH 1/4] nommu - do_mmap patch for fs/binfmt_flat.c

fs/binfmt_flat.c do_mmap patch against 2.6.12-rc3-mm3 : do_mmap flag should
not to be 0 for correct operation.

Signed-off-by : Hyok S. Choi <[email protected]>

Index: linux-2.6.12-rc3-mm3/fs/binfmt_flat.c
================================================================
--- linux-2.6.12-rc3-mm3/fs/binfmt_flat.c 2005-05-06
09:53:27.000000000 +0900
+++ linux-2.6.12-rc3-mm3-hsc0/fs/binfmt_flat.c 2005-05-06
12:05:11.000000000 +0900
@@ -292,7 +292,7 @@
kfree(buf);
out_free:
kfree(strm.workspace);
-out:
+
return retval;
}

@@ -505,7 +505,7 @@
/*
* calculate the extra space we need to map in
*/
- extra = max(bss_len + stack_len, relocs * sizeof(unsigned long));
+ extra = max(bss_len + stack_len, (unsigned long)relocs *
sizeof(unsigned long));

/*
* there are a couple of cases here, the separate code/data
@@ -520,7 +520,8 @@
DBG_FLT("BINFMT_FLAT: ROM mapping of file (we hope)\n");

down_write(&current->mm->mmap_sem);
- textpos = do_mmap(bprm->file, 0, text_len,
PROT_READ|PROT_EXEC, 0, 0);
+ textpos = do_mmap(bprm->file, 0, text_len,
PROT_READ|PROT_EXEC,
+ MAP_SHARED | MAP_DENYWRITE | MAP_EXECUTABLE, 0);
up_write(&current->mm->mmap_sem);
if (!textpos || textpos >= (unsigned long) -4096) {
if (!textpos)
@@ -532,7 +533,8 @@
down_write(&current->mm->mmap_sem);
realdatastart = do_mmap(0, 0, data_len + extra +
MAX_SHARED_LIBS * sizeof(unsigned long),
- PROT_READ|PROT_WRITE|PROT_EXEC, 0, 0);
+ PROT_READ|PROT_WRITE|PROT_EXEC,
+ MAP_SHARED, 0);
up_write(&current->mm->mmap_sem);

if (realdatastart == 0 || realdatastart >= (unsigned
long)-4096) {
@@ -574,7 +576,8 @@
down_write(&current->mm->mmap_sem);
textpos = do_mmap(0, 0, text_len + data_len + extra +
MAX_SHARED_LIBS * sizeof(unsigned
long),
- PROT_READ | PROT_EXEC | PROT_WRITE, 0, 0);
+ PROT_READ | PROT_EXEC | PROT_WRITE,
+ MAP_SHARED, 0);
up_write(&current->mm->mmap_sem);
if (!textpos || textpos >= (unsigned long) -4096) {
if (!textpos)