On 04/03/2020 04:28, Anshuman Khandual wrote: > The arm64 page table dump code can race with concurrent modification of the > kernel page tables. When a leaf entries are modified concurrently, the dump > code may log stale or inconsistent information for a VA range, but this is > otherwise not harmful. > > When intermediate levels of table are freed, the dump code will continue to > use memory which has been freed and potentially reallocated for another > purpose. In such cases, the dump code may dereference bogus addresses, > leading to a number of potential problems. > > Intermediate levels of table may by freed during memory hot-remove, > which will be enabled by a subsequent patch. To avoid racing with > this, take the memory hotplug lock when walking the kernel page table. > > Acked-by: David Hildenbrand <david@xxxxxxxxxx> > Acked-by: Mark Rutland <mark.rutland@xxxxxxx> > Acked-by: Catalin Marinas <catalin.marinas@xxxxxxx> > Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> Reviewed-by: Steven Price <steven.price@xxxxxxx> Thanks, Steve > --- > arch/arm64/mm/ptdump_debugfs.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm64/mm/ptdump_debugfs.c b/arch/arm64/mm/ptdump_debugfs.c > index 1f2eae3e988b..d29d722ec3ec 100644 > --- a/arch/arm64/mm/ptdump_debugfs.c > +++ b/arch/arm64/mm/ptdump_debugfs.c > @@ -1,5 +1,6 @@ > // SPDX-License-Identifier: GPL-2.0 > #include <linux/debugfs.h> > +#include <linux/memory_hotplug.h> > #include <linux/seq_file.h> > > #include <asm/ptdump.h> > @@ -7,7 +8,10 @@ > static int ptdump_show(struct seq_file *m, void *v) > { > struct ptdump_info *info = m->private; > + > + get_online_mems(); > ptdump_walk(m, info); > + put_online_mems(); > return 0; > } > DEFINE_SHOW_ATTRIBUTE(ptdump); >