]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: ptdump: expand type of 'val' in note_page()
authorSteven Price <steven.price@arm.com>
Tue, 2 Jun 2020 04:50:01 +0000 (21:50 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 2 Jun 2020 17:59:10 +0000 (10:59 -0700)
The page table entry is passed in the 'val' argument to note_page(),
however this was previously an "unsigned long" which is fine on 64-bit
platforms.  But for 32 bit x86 it is not always big enough to contain a
page table entry which may be 64 bits.

Change the type to u64 to ensure that it is always big enough.

[akpm@linux-foundation.org: fix riscv]
Reported-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Steven Price <steven.price@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: <stable@vger.kernel.org>
Link: http://lkml.kernel.org/r/20200521152308.33096-3-steven.price@arm.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/arm64/mm/dump.c
arch/riscv/mm/ptdump.c
arch/x86/mm/dump_pagetables.c
include/linux/ptdump.h

index 860c00ec8bd32a7307ef2326df25364f52c609c9..d4313bc0c4c1aa1c68dbd764fca5477b6c191f31 100644 (file)
@@ -247,7 +247,7 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
 }
 
 static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level,
-                     unsigned long val)
+                     u64 val)
 {
        struct pg_state *st = container_of(pt_st, struct pg_state, ptdump);
        static const char units[] = "KMGTPE";
index 7eab76a931061010c0b16bbc6da458827658f94f..070505d79b065986aa6904da71b594cdab0c9cbd 100644 (file)
@@ -204,7 +204,7 @@ static void note_prot_wx(struct pg_state *st, unsigned long addr)
 }
 
 static void note_page(struct ptdump_state *pt_st, unsigned long addr,
-                     int level, unsigned long val)
+                     int level, u64 val)
 {
        struct pg_state *st = container_of(pt_st, struct pg_state, ptdump);
        u64 pa = PFN_PHYS(pte_pfn(__pte(val)));
index 33093fdedb02d28602f2f634338adc16dea7eee6..ea9010113f69d921ed5e8428d5cefb06c06623db 100644 (file)
@@ -273,7 +273,7 @@ static void effective_prot(struct ptdump_state *pt_st, int level, u64 val)
  * print what we collected so far.
  */
 static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level,
-                     unsigned long val)
+                     u64 val)
 {
        struct pg_state *st = container_of(pt_st, struct pg_state, ptdump);
        pgprotval_t new_prot, new_eff;
index ac01502763bfe644f72aa313c022830806db5bbc..2a3a955864259a53a95d988991e6fc2c502bb720 100644 (file)
@@ -13,7 +13,7 @@ struct ptdump_range {
 struct ptdump_state {
        /* level is 0:PGD to 4:PTE, or -1 if unknown */
        void (*note_page)(struct ptdump_state *st, unsigned long addr,
-                         int level, unsigned long val);
+                         int level, u64 val);
        void (*effective_prot)(struct ptdump_state *st, int level, u64 val);
        const struct ptdump_range *range;
 };