|
@@ -744,7 +744,8 @@ static int htlb_check_hinted_area(unsigned long addr, unsigned long len)
|
|
|
struct vm_area_struct *vma;
|
|
|
|
|
|
vma = find_vma(current->mm, addr);
|
|
|
- if (!vma || ((addr + len) <= vma->vm_start))
|
|
|
+ if (TASK_SIZE - len >= addr &&
|
|
|
+ (!vma || ((addr + len) <= vma->vm_start)))
|
|
|
return 0;
|
|
|
|
|
|
return -ENOMEM;
|
|
@@ -815,6 +816,8 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
|
|
return -EINVAL;
|
|
|
if (len & ~HPAGE_MASK)
|
|
|
return -EINVAL;
|
|
|
+ if (len > TASK_SIZE)
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
if (!cpu_has_feature(CPU_FTR_16M_PAGE))
|
|
|
return -EINVAL;
|
|
@@ -823,9 +826,6 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
|
|
|
BUG_ON((addr + len) < addr);
|
|
|
|
|
|
if (test_thread_flag(TIF_32BIT)) {
|
|
|
- /* Paranoia, caller should have dealt with this */
|
|
|
- BUG_ON((addr + len) > 0x100000000UL);
|
|
|
-
|
|
|
curareas = current->mm->context.low_htlb_areas;
|
|
|
|
|
|
/* First see if we can use the hint address */
|