aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-12-15 19:14:39 -0500
committerIngo Molnar <mingo@kernel.org>2017-12-22 14:13:00 -0500
commitc05344947b37f7cda726e802457370bc6eac4d26 (patch)
treea732c27364c81fb573588442da9539ffa464e87b
parent7bbcbd3d1cdcbacd0f9f8dc4c98d550972f1ca30 (diff)
x86/mm/dump_pagetables: Check PAGE_PRESENT for real
The check for a present page in printk_prot(): if (!pgprot_val(prot)) { /* Not present */ is bogus. If a PTE is set to PAGE_NONE then the pgprot_val is not zero and the entry is decoded in bogus ways, e.g. as RX GLB. That is confusing when analyzing mapping correctness. Check for the present bit to make an informed decision. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Juergen Gross <jgross@suse.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: linux-kernel@vger.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/mm/dump_pagetables.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index 5e3ac6fe6c9e..1014cfb21c2c 100644
--- a/arch/x86/mm/dump_pagetables.c
+++ b/arch/x86/mm/dump_pagetables.c
@@ -140,7 +140,7 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg)
140 static const char * const level_name[] = 140 static const char * const level_name[] =
141 { "cr3", "pgd", "p4d", "pud", "pmd", "pte" }; 141 { "cr3", "pgd", "p4d", "pud", "pmd", "pte" };
142 142
143 if (!pgprot_val(prot)) { 143 if (!(pr & _PAGE_PRESENT)) {
144 /* Not present */ 144 /* Not present */
145 pt_dump_cont_printf(m, dmsg, " "); 145 pt_dump_cont_printf(m, dmsg, " ");
146 } else { 146 } else {