linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64: ptdump: Allow dumping user page tables
@ 2021-10-01 14:56 Vincent Whitchurch
  2021-10-19 12:09 ` Will Deacon
  0 siblings, 1 reply; 3+ messages in thread
From: Vincent Whitchurch @ 2021-10-01 14:56 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon
  Cc: kernel, Vincent Whitchurch, linux-arm-kernel, linux-kernel

Add a user_page_tables debugfs file (similar to kernel_page_tables) to
dump out the userspace page tables for the current process.  This
provides details which are not available via pagemap (such as the memory
type) and is useful when, for example, debugging ->mmap()
implementations.

Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
---
 arch/arm64/mm/ptdump.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/mm/ptdump.c b/arch/arm64/mm/ptdump.c
index 1c403536c9bb..91a62f07eae2 100644
--- a/arch/arm64/mm/ptdump.c
+++ b/arch/arm64/mm/ptdump.c
@@ -309,6 +309,7 @@ static void note_page(struct ptdump_state *pt_st, unsigned long addr, int level,
 
 void ptdump_walk(struct seq_file *s, struct ptdump_info *info)
 {
+	struct mm_struct *mm = info->mm ?: current->mm;
 	unsigned long end = ~0UL;
 	struct pg_state st;
 
@@ -328,7 +329,7 @@ void ptdump_walk(struct seq_file *s, struct ptdump_info *info)
 		}
 	};
 
-	ptdump_walk_pgd(&st.ptdump, info->mm, NULL);
+	ptdump_walk_pgd(&st.ptdump, mm, NULL);
 }
 
 static void __init ptdump_initialize(void)
@@ -347,6 +348,16 @@ static struct ptdump_info kernel_ptdump_info = {
 	.base_addr	= PAGE_OFFSET,
 };
 
+static struct addr_marker user_address_markers[] = {
+	{ 0,				"Userspace memory start" },
+	{ 0 /* TASK_SIZE_64 */,		"Userspace memory end" },
+	{ -1,				NULL },
+};
+
+static struct ptdump_info user_ptdump_info = {
+	.markers	= user_address_markers,
+};
+
 void ptdump_check_wx(void)
 {
 	struct pg_state st = {
@@ -381,8 +392,10 @@ static int __init ptdump_init(void)
 #if defined(CONFIG_KASAN_GENERIC) || defined(CONFIG_KASAN_SW_TAGS)
 	address_markers[KASAN_START_NR].start_address = KASAN_SHADOW_START;
 #endif
+	user_address_markers[1].start_address = TASK_SIZE_64;
 	ptdump_initialize();
 	ptdump_debugfs_register(&kernel_ptdump_info, "kernel_page_tables");
+	ptdump_debugfs_register(&user_ptdump_info, "user_page_tables");
 	return 0;
 }
 device_initcall(ptdump_init);
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] arm64: ptdump: Allow dumping user page tables
  2021-10-01 14:56 [PATCH] arm64: ptdump: Allow dumping user page tables Vincent Whitchurch
@ 2021-10-19 12:09 ` Will Deacon
  2021-10-19 12:33   ` Vincent Whitchurch
  0 siblings, 1 reply; 3+ messages in thread
From: Will Deacon @ 2021-10-19 12:09 UTC (permalink / raw)
  To: Vincent Whitchurch
  Cc: Catalin Marinas, kernel, linux-arm-kernel, linux-kernel

On Fri, Oct 01, 2021 at 04:56:03PM +0200, Vincent Whitchurch wrote:
> Add a user_page_tables debugfs file (similar to kernel_page_tables) to
> dump out the userspace page tables for the current process.  This
> provides details which are not available via pagemap (such as the memory
> type) and is useful when, for example, debugging ->mmap()
> implementations.
> 
> Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
> ---
>  arch/arm64/mm/ptdump.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)

How does this serialise with things like task exit?

Will

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] arm64: ptdump: Allow dumping user page tables
  2021-10-19 12:09 ` Will Deacon
@ 2021-10-19 12:33   ` Vincent Whitchurch
  0 siblings, 0 replies; 3+ messages in thread
From: Vincent Whitchurch @ 2021-10-19 12:33 UTC (permalink / raw)
  To: Will Deacon; +Cc: Catalin Marinas, kernel, linux-arm-kernel, linux-kernel

On Tue, Oct 19, 2021 at 02:09:32PM +0200, Will Deacon wrote:
> On Fri, Oct 01, 2021 at 04:56:03PM +0200, Vincent Whitchurch wrote:
> > Add a user_page_tables debugfs file (similar to kernel_page_tables) to
> > dump out the userspace page tables for the current process.  This
> > provides details which are not available via pagemap (such as the memory
> > type) and is useful when, for example, debugging ->mmap()
> > implementations.
> > 
> > Signed-off-by: Vincent Whitchurch <vincent.whitchurch@axis.com>
> > ---
> >  arch/arm64/mm/ptdump.c | 15 ++++++++++++++-
> >  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> How does this serialise with things like task exit?

A task can only read its own page tables using this file, and the mm
lock is held during the walk in ptdump_walk_pgd().  Isn't that
sufficient?

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-10-19 12:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-01 14:56 [PATCH] arm64: ptdump: Allow dumping user page tables Vincent Whitchurch
2021-10-19 12:09 ` Will Deacon
2021-10-19 12:33   ` Vincent Whitchurch

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).