• Martin Schwidefsky's avatar
    s390/mm: fix pxd_bad with folded page tables · c9f62152
    Martin Schwidefsky authored
    With git commit d1874a0c
    "s390/mm: make the pxd_offset functions more robust" and a 2-level page
    table it can now happen that pgd_bad() gets asked to verify a large
    segment table entry. If the entry is marked as dirty pgd_bad() will
    incorrectly return true.
    
    Change the pgd_bad(), p4d_bad(), pud_bad() and pmd_bad() functions to
    first verify the table type, return false if the table level is lower
    than what the function is suppossed to check, return true if the table
    level is too high, and otherwise check the relevant region and segment
    table bits. pmd_bad() has to check against ~SEGMENT_ENTRY_BITS for
    normal page table pointers or ~SEGMENT_ENTRY_BITS_LARGE for large
    segment table entries. Same for pud_bad() which has to check against
    ~_REGION_ENTRY_BITS or ~_REGION_ENTRY_BITS_LARGE.
    
    Fixes: d1874a0c ("s390/mm: make the pxd_offset functions more robust")
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    c9f62152
pgtable.h 49.6 KB