• Gerald Schaefer's avatar
    s390/mm: make pmd/pud_deref() large page aware · b0e98aa9
    Gerald Schaefer authored
    pmd/pud_deref() assume that they will never operate on large pmd/pud
    entries, and therefore only use the non-large _xxx_ENTRY_ORIGIN mask.
    With commit 9ec8fa8d ("s390/vmemmap: extend modify_pagetable()
    to handle vmemmap"), that assumption is no longer true, at least for
    pmd_deref().
    
    In theory, we could end up with wrong addresses because some of the
    non-address bits of a large entry would not be masked out.
    In practice, this does not (yet) show any impact, because vmemmap_free()
    is currently never used for s390.
    
    Fix pmd/pud_deref() to check for the entry type and use the
    _xxx_ENTRY_ORIGIN_LARGE mask for large entries.
    
    While at it, also move pmd/pud_pfn() around, in order to avoid code
    duplication, because they do the same thing.
    
    Fixes: 9ec8fa8d ("s390/vmemmap: extend modify_pagetable() to handle vmemmap")
    Cc: <stable@vger.kernel.org> # 5.9
    Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
    Reviewed-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
    b0e98aa9
pgtable.h 49.9 KB