|
@@ -101,12 +101,15 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
|
|
|
|
|
|
#else
|
|
|
|
|
|
-int s390_mmap_check(unsigned long addr, unsigned long len)
|
|
|
+int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
|
|
|
{
|
|
|
int rc;
|
|
|
|
|
|
- if (!is_compat_task() &&
|
|
|
- len >= TASK_SIZE && TASK_SIZE < (1UL << 53)) {
|
|
|
+ if (is_compat_task() || (TASK_SIZE >= (1UL << 53)))
|
|
|
+ return 0;
|
|
|
+ if (!(flags & MAP_FIXED))
|
|
|
+ addr = 0;
|
|
|
+ if ((addr + len) >= TASK_SIZE) {
|
|
|
rc = crst_table_upgrade(current->mm, 1UL << 53);
|
|
|
if (rc)
|
|
|
return rc;
|