Re: don't let mmap allocate down to zero

From: William Lee Irwin III
Date: Thu Jan 27 2005 - 15:55:06 EST


On Thu, 27 Jan 2005, William Lee Irwin III wrote:
>> The only claim above is the effect of clobbering virtual page 0 and
>> referring to this phenomenon by the macro. I was rather careful not to
>> claim a specific lower boundary to the address space.

On Thu, Jan 27, 2005 at 02:22:50PM -0500, Rik van Riel wrote:
> OK, here is a patch that does compile against the current
> 2.6 kernel. It it obvious we need a cutoff somewhere, so
> I've chosen one that's sure to spark up a conversation
> and I'll let others decide what that cutoff value is ;)))

Okay, 2 comments:

(a) The most permissive scheme possible given architectural constraints
I'm aware of (thanks, rmk) would only disallow below PAGE_SIZE,
or basically !vma->vm_start. mm->brk affects executables with
high load addresses and prevents the use of the lower 128MB on
ia32, which I personally make extensive use of in order to move
program stacks out of the way of larger mmap()'s and to conserve
pagetable memory.
(b) sys_mremap() isn't covered.

Does the following give you any new ideas?


-- wli

Index: mm1-2.6.11-rc2/mm/mmap.c
===================================================================
--- mm1-2.6.11-rc2.orig/mm/mmap.c 2005-01-26 00:30:38.000000000 -0800
+++ mm1-2.6.11-rc2/mm/mmap.c 2005-01-27 12:33:34.000000000 -0800
@@ -1258,7 +1258,7 @@
* return with success:
*/
vma = find_vma(mm, addr);
- if (!vma || addr+len <= vma->vm_start)
+ if (addr && (!vma || addr+len <= vma->vm_start))
/* remember the address as a hint for next time */
return (mm->free_area_cache = addr);

Index: mm1-2.6.11-rc2/mm/mremap.c
===================================================================
--- mm1-2.6.11-rc2.orig/mm/mremap.c 2005-01-26 00:26:43.000000000 -0800
+++ mm1-2.6.11-rc2/mm/mremap.c 2005-01-27 12:34:34.000000000 -0800
@@ -297,6 +297,8 @@
if (flags & MREMAP_FIXED) {
if (new_addr & ~PAGE_MASK)
goto out;
+ if (!new_addr)
+ goto out;
if (!(flags & MREMAP_MAYMOVE))
goto out;

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