--- linux-source-2.6.22/mm/mremap.c.orig 2007-09-27 23:02:13.000000000 -0600 +++ linux-source-2.6.22/mm/mremap.c 2007-09-27 23:07:29.000000000 -0600 @@ -23,6 +23,10 @@ #include #include +#ifndef MAP_32BIT +#define MAP_32BIT 0 +#endif + static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr) { pgd_t *pgd; @@ -255,7 +259,7 @@ unsigned long ret = -EINVAL; unsigned long charged = 0; - if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE)) + if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE | MAP_32BIT)) goto out; if (addr & ~PAGE_MASK) @@ -388,6 +392,9 @@ if (vma->vm_flags & VM_MAYSHARE) map_flags |= MAP_SHARED; + if (flags & MAP_32BIT) + map_flags |= MAP_32BIT; + new_addr = get_unmapped_area(vma->vm_file, 0, new_len, vma->vm_pgoff, map_flags); ret = new_addr;