|
@@ -103,9 +103,15 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
|
|
|
|
|
|
int s390_mmap_check(unsigned long addr, unsigned long len)
|
|
|
{
|
|
|
+ int rc;
|
|
|
+
|
|
|
if (!is_compat_task() &&
|
|
|
- len >= TASK_SIZE && TASK_SIZE < (1UL << 53))
|
|
|
- return crst_table_upgrade(current->mm, 1UL << 53);
|
|
|
+ len >= TASK_SIZE && TASK_SIZE < (1UL << 53)) {
|
|
|
+ rc = crst_table_upgrade(current->mm, 1UL << 53);
|
|
|
+ if (rc)
|
|
|
+ return rc;
|
|
|
+ update_mm(current->mm, current);
|
|
|
+ }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -125,6 +131,7 @@ s390_get_unmapped_area(struct file *filp, unsigned long addr,
|
|
|
rc = crst_table_upgrade(mm, 1UL << 53);
|
|
|
if (rc)
|
|
|
return (unsigned long) rc;
|
|
|
+ update_mm(mm, current);
|
|
|
area = arch_get_unmapped_area(filp, addr, len, pgoff, flags);
|
|
|
}
|
|
|
return area;
|
|
@@ -147,6 +154,7 @@ s390_get_unmapped_area_topdown(struct file *filp, const unsigned long addr,
|
|
|
rc = crst_table_upgrade(mm, 1UL << 53);
|
|
|
if (rc)
|
|
|
return (unsigned long) rc;
|
|
|
+ update_mm(mm, current);
|
|
|
area = arch_get_unmapped_area_topdown(filp, addr, len,
|
|
|
pgoff, flags);
|
|
|
}
|