On Mon, Dec 18, 2017 at 12:42:16PM +0100, Thomas Gleixner wrote:
> From: Thomas Gleixner <t...@linutronix.de>
> 
> 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 <t...@linutronix.de>
> ---
>  arch/x86/mm/dump_pagetables.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> --- 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
>       static const char * const level_name[] =
>               { "cr3", "pgd", "p4d", "pud", "pmd", "pte" };
>  
> -     if (!pgprot_val(prot)) {
> +     if (!(pgprot_val(prot) & _PAGE_PRESENT)) {

Just a minor thing: there's a local pr variable a couple of lines up
which is pgprot_val(prot). So you could do additionally:

diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
index dd8820e5da28..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)
        static const char * const level_name[] =
                { "cr3", "pgd", "p4d", "pud", "pmd", "pte" };
 
-       if (!(pgprot_val(prot) & _PAGE_PRESENT)) {
+       if (!(pr & _PAGE_PRESENT)) {
                /* Not present */
                pt_dump_cont_printf(m, dmsg, "                              ");
        } else {
--

Regardless,

Reviewed-by: Borislav Petkov <b...@suse.de>

-- 
Regards/Gruss,
    Boris.

SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 
(AG Nürnberg)
-- 

Reply via email to