|
|
@@ -1,6 +1,7 @@
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
|
|
#include <linux/mm.h>
|
|
|
#include <linux/hugetlb.h>
|
|
|
+#include <linux/security.h>
|
|
|
#include <asm/pgtable.h>
|
|
|
#include <asm/pgalloc.h>
|
|
|
#include <asm/cacheflush.h>
|
|
|
@@ -73,7 +74,7 @@ radix__hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
|
|
if (addr) {
|
|
|
addr = ALIGN(addr, huge_page_size(h));
|
|
|
vma = find_vma(mm, addr);
|
|
|
- if (high_limit - len >= addr &&
|
|
|
+ if (high_limit - len >= addr && addr >= mmap_min_addr &&
|
|
|
(!vma || addr + len <= vm_start_gap(vma)))
|
|
|
return addr;
|
|
|
}
|
|
|
@@ -83,7 +84,7 @@ radix__hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
|
|
*/
|
|
|
info.flags = VM_UNMAPPED_AREA_TOPDOWN;
|
|
|
info.length = len;
|
|
|
- info.low_limit = PAGE_SIZE;
|
|
|
+ info.low_limit = max(PAGE_SIZE, mmap_min_addr);
|
|
|
info.high_limit = mm->mmap_base + (high_limit - DEFAULT_MAP_WINDOW);
|
|
|
info.align_mask = PAGE_MASK & ~huge_page_mask(h);
|
|
|
info.align_offset = 0;
|