diff options
| -rw-r--r-- | arch/s390/include/asm/mman.h | 4 | ||||
| -rw-r--r-- | arch/s390/mm/mmap.c | 9 |
2 files changed, 8 insertions, 5 deletions
diff --git a/arch/s390/include/asm/mman.h b/arch/s390/include/asm/mman.h index 0e47a576d666..9977e08df5bd 100644 --- a/arch/s390/include/asm/mman.h +++ b/arch/s390/include/asm/mman.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #include <uapi/asm/mman.h> | 9 | #include <uapi/asm/mman.h> |
| 10 | 10 | ||
| 11 | #if !defined(__ASSEMBLY__) && defined(CONFIG_64BIT) | 11 | #if !defined(__ASSEMBLY__) && defined(CONFIG_64BIT) |
| 12 | int s390_mmap_check(unsigned long addr, unsigned long len); | 12 | int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags); |
| 13 | #define arch_mmap_check(addr,len,flags) s390_mmap_check(addr,len) | 13 | #define arch_mmap_check(addr, len, flags) s390_mmap_check(addr, len, flags) |
| 14 | #endif | 14 | #endif |
| 15 | #endif /* __S390_MMAN_H__ */ | 15 | #endif /* __S390_MMAN_H__ */ |
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c index c59a5efa58b1..06bafec00278 100644 --- a/arch/s390/mm/mmap.c +++ b/arch/s390/mm/mmap.c | |||
| @@ -101,12 +101,15 @@ void arch_pick_mmap_layout(struct mm_struct *mm) | |||
| 101 | 101 | ||
| 102 | #else | 102 | #else |
| 103 | 103 | ||
| 104 | int s390_mmap_check(unsigned long addr, unsigned long len) | 104 | int s390_mmap_check(unsigned long addr, unsigned long len, unsigned long flags) |
| 105 | { | 105 | { |
| 106 | int rc; | 106 | int rc; |
| 107 | 107 | ||
| 108 | if (!is_compat_task() && | 108 | if (is_compat_task() || (TASK_SIZE >= (1UL << 53))) |
| 109 | len >= TASK_SIZE && TASK_SIZE < (1UL << 53)) { | 109 | return 0; |
| 110 | if (!(flags & MAP_FIXED)) | ||
| 111 | addr = 0; | ||
| 112 | if ((addr + len) >= TASK_SIZE) { | ||
| 110 | rc = crst_table_upgrade(current->mm, 1UL << 53); | 113 | rc = crst_table_upgrade(current->mm, 1UL << 53); |
| 111 | if (rc) | 114 | if (rc) |
| 112 | return rc; | 115 | return rc; |
