| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- From d54a0500d55a2856efdea3b427e91d8fcf74ca63 Mon Sep 17 00:00:00 2001
- From: Thomas Gleixner <[email protected]>
- Date: Sat, 16 Dec 2017 01:14:39 +0100
- Subject: [PATCH 164/232] x86/mm/dump_pagetables: Check PAGE_PRESENT for real
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- CVE-2017-5754
- 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 <[email protected]>
- Cc: Andy Lutomirski <[email protected]>
- Cc: Borislav Petkov <[email protected]>
- Cc: Dave Hansen <[email protected]>
- Cc: H. Peter Anvin <[email protected]>
- Cc: Josh Poimboeuf <[email protected]>
- Cc: Juergen Gross <[email protected]>
- Cc: Linus Torvalds <[email protected]>
- Cc: Peter Zijlstra <[email protected]>
- Cc: [email protected]
- Signed-off-by: Ingo Molnar <[email protected]>
- (cherry picked from commit c05344947b37f7cda726e802457370bc6eac4d26)
- Signed-off-by: Andy Whitcroft <[email protected]>
- Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
- (cherry picked from commit d902780eaea12f23b50be4ff00f8df6157c30e4a)
- Signed-off-by: Fabian Grünbichler <[email protected]>
- ---
- arch/x86/mm/dump_pagetables.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
- index 0470826d2bdc..91aa41c5e0dd 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)
- static const char * const level_name[] =
- { "cr3", "pgd", "pud", "pmd", "pte" };
-
- - if (!pgprot_val(prot)) {
- + if (!(pr & _PAGE_PRESENT)) {
- /* Not present */
- pt_dump_cont_printf(m, dmsg, " ");
- } else {
- --
- 2.14.2
|