]> git.baikalelectronics.ru Git - kernel.git/commit
s390/mm: fix pxd_bad with folded page tables
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 24 Apr 2019 10:49:44 +0000 (12:49 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 24 Apr 2019 11:28:50 +0000 (13:28 +0200)
commit9bff2a824fbe4067cb043ca5a3d65b1a595ce4a0
treeb465574070c6b0085a17f8f0b846b39fd33acac5
parent7f950e63075b855642b8ffcc18dd8925617658c1
s390/mm: fix pxd_bad with folded page tables

With git commit 7afc8e5ac0e8babb8d9be6cf01789f646bba2140
"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: 7afc8e5ac0e8 ("s390/mm: make the pxd_offset functions more robust")
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/include/asm/pgtable.h