s390/mm: Fix crst upgrade of mmap with MAP_FIXED
[deliverable/linux.git] / arch / s390 / mm / mmap.c
index c59a5efa58b1ee701f93b4f980397e539265805a..06bafec00278c654d616c731a2711a0b7b5beced 100644 (file)
@@ -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;
This page took 0.048086 seconds and 5 git commands to generate.