*/
 static unsigned long unmapped_area(struct vm_unmapped_area_info *info)
 {
-       unsigned long length, gap, low_limit;
+       unsigned long length, gap;
+       unsigned long low_limit, high_limit;
        struct vm_area_struct *tmp;
 
        MA_STATE(mas, ¤t->mm->mm_mt, 0, 0);
                return -ENOMEM;
 
        low_limit = info->low_limit;
+       if (low_limit < mmap_min_addr)
+               low_limit = mmap_min_addr;
+       high_limit = info->high_limit;
 retry:
-       if (mas_empty_area(&mas, low_limit, info->high_limit - 1, length))
+       if (mas_empty_area(&mas, low_limit, high_limit - 1, length))
                return -ENOMEM;
 
        gap = mas.index;
  */
 static unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info)
 {
-       unsigned long length, gap, high_limit, gap_end;
+       unsigned long length, gap, gap_end;
+       unsigned long low_limit, high_limit;
        struct vm_area_struct *tmp;
 
        MA_STATE(mas, ¤t->mm->mm_mt, 0, 0);
        if (length < info->length)
                return -ENOMEM;
 
+       low_limit = info->low_limit;
+       if (low_limit < mmap_min_addr)
+               low_limit = mmap_min_addr;
        high_limit = info->high_limit;
 retry:
-       if (mas_empty_area_rev(&mas, info->low_limit, high_limit - 1,
-                               length))
+       if (mas_empty_area_rev(&mas, low_limit, high_limit - 1, length))
                return -ENOMEM;
 
        gap = mas.last + 1 - info->length;
 
        info.flags = VM_UNMAPPED_AREA_TOPDOWN;
        info.length = len;
-       info.low_limit = max(PAGE_SIZE, mmap_min_addr);
+       info.low_limit = PAGE_SIZE;
        info.high_limit = arch_get_mmap_base(addr, mm->mmap_base);
        info.align_mask = 0;
        info.align_offset = 0;