s390/mm: fork vs. 5 level page tabel
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 31 Aug 2017 10:30:54 +0000 (12:30 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 31 Aug 2017 12:03:21 +0000 (14:03 +0200)
The mm->context.asce field of a new process is not set up correctly
in case of a fork with a 5 level page table.
Add the missing case to init_new_context().

Fixes: 1aea9b3f9210 ("s390/mm: implement 5 level pages tables")
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/mmu_context.h

index 4541ac4..24bc416 100644 (file)
@@ -44,6 +44,11 @@ static inline int init_new_context(struct task_struct *tsk,
                mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
                                   _ASCE_USER_BITS | _ASCE_TYPE_REGION3;
                break;
+       case -PAGE_SIZE:
+               /* forked 5-level task, set new asce with new_mm->pgd */
+               mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |
+                       _ASCE_USER_BITS | _ASCE_TYPE_REGION1;
+               break;
        case 1UL << 53:
                /* forked 4-level task, set new asce with new mm->pgd */
                mm->context.asce = __pa(mm->pgd) | _ASCE_TABLE_LENGTH |