Steven Price
99395ee3f7
mm: ptdump: expand type of 'val' in note_page()
...
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.
[[email protected] : fix riscv]
Reported-by: Jan Beulich <[email protected] >
Signed-off-by: Steven Price <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Cc: Andy Lutomirski <[email protected] >
Cc: Borislav Petkov <[email protected] >
Cc: Dave Hansen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Peter Zijlstra <[email protected] >
Cc: Thomas Gleixner <[email protected] >
Cc: <[email protected] >
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected] >
2020-06-02 10:59:10 -07:00
Steven Price
1494e0c38e
x86: mm: ptdump: calculate effective permissions correctly
...
Patch series "Fix W+X debug feature on x86"
Jan alerted me[1] that the W+X detection debug feature was broken in x86
by my change[2] to switch x86 to use the generic ptdump infrastructure.
Fundamentally the approach of trying to move the calculation of
effective permissions into note_page() was broken because note_page() is
only called for 'leaf' entries and the effective permissions are passed
down via the internal nodes of the page tree. The solution I've taken
here is to create a new (optional) callback which is called for all
nodes of the page tree and therefore can calculate the effective
permissions.
Secondly on some configurations (32 bit with PAE) "unsigned long" is not
large enough to store the table entries. The fix here is simple - let's
just use a u64.
[1] https://lore.kernel.org/lkml/[email protected] /
[2] 2ae27137b2 ("x86: mm: convert dump_pagetables to use walk_page_range")
This patch (of 2):
By switching the x86 page table dump code to use the generic code the
effective permissions are no longer calculated correctly because the
note_page() function is only called for *leaf* entries. To calculate
the actual effective permissions it is necessary to observe the full
hierarchy of the page tree.
Introduce a new callback for ptdump which is called for every entry and
can therefore update the prot_levels array correctly. note_page() can
then simply access the appropriate element in the array.
[[email protected] : make the assignment conditional on val != 0]
Link: http://lkml.kernel.org/r/[email protected]
Fixes: 2ae27137b2 ("x86: mm: convert dump_pagetables to use walk_page_range")
Reported-by: Jan Beulich <[email protected] >
Signed-off-by: Steven Price <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Cc: Qian Cai <[email protected] >
Cc: Andy Lutomirski <[email protected] >
Cc: Borislav Petkov <[email protected] >
Cc: Dave Hansen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Peter Zijlstra <[email protected] >
Cc: Thomas Gleixner <[email protected] >
Cc: <[email protected] >
Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected] >
2020-06-02 10:59:09 -07:00
Steven Price
e47690d756
x86: mm: avoid allocating struct mm_struct on the stack
...
struct mm_struct is quite large (~1664 bytes) and so allocating on the
stack may cause problems as the kernel stack size is small.
Since ptdump_walk_pgd_level_core() was only allocating the structure so
that it could modify the pgd argument we can instead introduce a pgd
override in struct mm_walk and pass this down the call stack to where it
is needed.
Since the correct mm_struct is now being passed down, it is now also
unnecessary to take the mmap_sem semaphore because ptdump_walk_pgd() will
now take the semaphore on the real mm.
[[email protected] : restore missed arm64 changes]
Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Steven Price <[email protected] >
Reported-by: Stephen Rothwell <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Albert Ou <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Andy Lutomirski <[email protected] >
Cc: Ard Biesheuvel <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: Benjamin Herrenschmidt <[email protected] >
Cc: Borislav Petkov <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dave Hansen <[email protected] >
Cc: David S. Miller <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: James Hogan <[email protected] >
Cc: James Morse <[email protected] >
Cc: Jerome Glisse <[email protected] >
Cc: "Liang, Kan" <[email protected] >
Cc: Mark Rutland <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Paul Burton <[email protected] >
Cc: Paul Mackerras <[email protected] >
Cc: Paul Walmsley <[email protected] >
Cc: Peter Zijlstra <[email protected] >
Cc: Ralf Baechle <[email protected] >
Cc: Russell King <[email protected] >
Cc: Thomas Gleixner <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: Vineet Gupta <[email protected] >
Cc: Will Deacon <[email protected] >
Cc: Zong Li <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Signed-off-by: Linus Torvalds <[email protected] >
2020-02-04 03:05:25 +00:00
Steven Price
f8f0d0b6fa
mm: ptdump: reduce level numbers by 1 in note_page()
...
Rather than having to increment the 'depth' number by 1 in ptdump_hole(),
let's change the meaning of 'level' in note_page() since that makes the
code simplier.
Note that for x86, the level numbers were previously increased by 1 in
commit 45dcd20913 ("x86/mm/dump_pagetables: Fix printout of p4d level")
and the comment "Bit 7 has a different meaning" was not updated, so this
change also makes the code match the comment again.
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Steven Price <[email protected] >
Reviewed-by: Catalin Marinas <[email protected] >
Cc: Albert Ou <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Andy Lutomirski <[email protected] >
Cc: Ard Biesheuvel <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: Benjamin Herrenschmidt <[email protected] >
Cc: Borislav Petkov <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dave Hansen <[email protected] >
Cc: David S. Miller <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: James Hogan <[email protected] >
Cc: James Morse <[email protected] >
Cc: Jerome Glisse <[email protected] >
Cc: "Liang, Kan" <[email protected] >
Cc: Mark Rutland <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Paul Burton <[email protected] >
Cc: Paul Mackerras <[email protected] >
Cc: Paul Walmsley <[email protected] >
Cc: Peter Zijlstra <[email protected] >
Cc: Ralf Baechle <[email protected] >
Cc: Russell King <[email protected] >
Cc: Thomas Gleixner <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: Vineet Gupta <[email protected] >
Cc: Will Deacon <[email protected] >
Cc: Zong Li <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Signed-off-by: Linus Torvalds <[email protected] >
2020-02-04 03:05:25 +00:00
Steven Price
30d621f672
mm: add generic ptdump
...
Add a generic version of page table dumping that architectures can opt-in
to.
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Steven Price <[email protected] >
Cc: Albert Ou <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Andy Lutomirski <[email protected] >
Cc: Ard Biesheuvel <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: Benjamin Herrenschmidt <[email protected] >
Cc: Borislav Petkov <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dave Hansen <[email protected] >
Cc: David S. Miller <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: James Hogan <[email protected] >
Cc: James Morse <[email protected] >
Cc: Jerome Glisse <[email protected] >
Cc: "Liang, Kan" <[email protected] >
Cc: Mark Rutland <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Paul Burton <[email protected] >
Cc: Paul Mackerras <[email protected] >
Cc: Paul Walmsley <[email protected] >
Cc: Peter Zijlstra <[email protected] >
Cc: Ralf Baechle <[email protected] >
Cc: Russell King <[email protected] >
Cc: Thomas Gleixner <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: Vineet Gupta <[email protected] >
Cc: Will Deacon <[email protected] >
Cc: Zong Li <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
Signed-off-by: Linus Torvalds <[email protected] >
2020-02-04 03:05:25 +00:00