s390/mm: Fix crst upgrade of mmap with MAP_FIXED
Right now the page table upgrade does not happen if the end address of a fixed mapping is greater than TASK_SIZE. Enhance s390_mmap_check() to handle MAP_FIXED mappings correctly. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:

committed by
Martin Schwidefsky

parent
a4e69245bd
commit
486c0a0bc8
@@ -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;
|
||||
|
Reference in New Issue
Block a user