From: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
To: Pasha Tatashin <pasha.tatashin@soleen.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org,
cgroups@vger.kernel.org, linux-kselftest@vger.kernel.org,
akpm@linux-foundation.org, corbet@lwn.net, derek.kiernan@amd.com,
dragan.cvetic@amd.com, arnd@arndb.de, gregkh@linuxfoundation.org,
viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz,
tj@kernel.org, hannes@cmpxchg.org, mhocko@kernel.org,
roman.gushchin@linux.dev, shakeel.butt@linux.dev,
muchun.song@linux.dev, Liam.Howlett@oracle.com, vbabka@suse.cz,
jannh@google.com, shuah@kernel.org, vegard.nossum@oracle.com,
vattunuru@marvell.com, schalla@marvell.com, david@redhat.com,
willy@infradead.org, osalvador@suse.de,
usama.anjum@collabora.com, andrii@kernel.org,
ryan.roberts@arm.com, peterx@redhat.com, oleg@redhat.com,
tandersen@netflix.com, rientjes@google.com, gthelen@google.com
Subject: Re: [RFCv1 0/6] Page Detective
Date: Mon, 18 Nov 2024 11:17:18 +0000 [thread overview]
Message-ID: <a0372f7f-9a85-4d3e-ba20-b5911a8189e3@lucifer.local> (raw)
In-Reply-To: <20241116175922.3265872-1-pasha.tatashin@soleen.com>
On Sat, Nov 16, 2024 at 05:59:16PM +0000, Pasha Tatashin wrote:
> Page Detective is a new kernel debugging tool that provides detailed
> information about the usage and mapping of physical memory pages.
>
> It is often known that a particular page is corrupted, but it is hard to
> extract more information about such a page from live system. Examples
> are:
>
> - Checksum failure during live migration
> - Filesystem journal failure
> - dump_page warnings on the console log
> - Unexcpected segfaults
>
> Page Detective helps to extract more information from the kernel, so it
> can be used by developers to root cause the associated problem.
I like the _concept_ of providing more information like this.
But you've bizarrely gone to great lengths to expose mm internal
implementation details to drivers in order to implement this as a driver.
This is _very clearly_ an mm thing, and _very clearly_ subject to change
depending on how mm changes. It should live under mm/ and not be a loadable
driver.
I am also very very much not in favour of re-implementing yet another page
table walker, this time in driver code (!). Please no.
So NACK in its current form. This has to be implemented within mm if we are
to take it.
I'm also concerned about its scalability and impact on the system, as it
takes every single mm lock in the system at once, which seems kinda unwise
or at least problematic, and not something we want happening outside of mm,
at any rate.
>
> It operates through the Linux debugfs interface, with two files: "virt"
> and "phys".
>
> The "virt" file takes a virtual address and PID and outputs information
> about the corresponding page.
>
> The "phys" file takes a physical address and outputs information about
> that page.
>
> The output is presented via kernel log messages (can be accessed with
> dmesg), and includes information such as the page's reference count,
> mapping, flags, and memory cgroup. It also shows whether the page is
> mapped in the kernel page table, and if so, how many times.
I mean, even though I'm not a huge fan of kernel pointer hashing etc. this
is obviously leaking as much information as you might want about kernel
internal state to the point of maybe making the whole kernel pointer
hashing thing moot.
I know this requires CAP_SYS_ADMIN, but there are things that also require
that which _still_ obscure kernel pointers.
And you're outputting it all to dmesg.
So yeah, a security person (Jann?) would be better placed to comment on
this than me, but are we sure we want to do this when not in a
CONFIG_DEBUG_VM* kernel?
>
> Pasha Tatashin (6):
> mm: Make get_vma_name() function public
> pagewalk: Add a page table walker for init_mm page table
> mm: Add a dump_page variant that accept log level argument
> misc/page_detective: Introduce Page Detective
> misc/page_detective: enable loadable module
> selftests/page_detective: Introduce self tests for Page Detective
>
> Documentation/misc-devices/index.rst | 1 +
> Documentation/misc-devices/page_detective.rst | 78 ++
> MAINTAINERS | 8 +
> drivers/misc/Kconfig | 11 +
> drivers/misc/Makefile | 1 +
> drivers/misc/page_detective.c | 808 ++++++++++++++++++
> fs/inode.c | 18 +-
> fs/kernfs/dir.c | 1 +
> fs/proc/task_mmu.c | 61 --
> include/linux/fs.h | 5 +-
> include/linux/mmdebug.h | 1 +
> include/linux/pagewalk.h | 2 +
> kernel/pid.c | 1 +
> mm/debug.c | 53 +-
> mm/memcontrol.c | 1 +
> mm/oom_kill.c | 1 +
> mm/pagewalk.c | 32 +
> mm/vma.c | 60 ++
> tools/testing/selftests/Makefile | 1 +
> .../selftests/page_detective/.gitignore | 1 +
> .../testing/selftests/page_detective/Makefile | 7 +
> tools/testing/selftests/page_detective/config | 4 +
> .../page_detective/page_detective_test.c | 727 ++++++++++++++++
> 23 files changed, 1787 insertions(+), 96 deletions(-)
> create mode 100644 Documentation/misc-devices/page_detective.rst
> create mode 100644 drivers/misc/page_detective.c
> create mode 100644 tools/testing/selftests/page_detective/.gitignore
> create mode 100644 tools/testing/selftests/page_detective/Makefile
> create mode 100644 tools/testing/selftests/page_detective/config
> create mode 100644 tools/testing/selftests/page_detective/page_detective_test.c
>
> --
> 2.47.0.338.g60cca15819-goog
>
next prev parent reply other threads:[~2024-11-18 11:17 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-16 17:59 Pasha Tatashin
2024-11-16 17:59 ` [RFCv1 1/6] mm: Make get_vma_name() function public Pasha Tatashin
2024-11-18 10:26 ` Lorenzo Stoakes
2024-11-18 20:40 ` Pasha Tatashin
2024-11-18 20:44 ` Matthew Wilcox
2024-11-18 22:26 ` Pasha Tatashin
2024-11-16 17:59 ` [RFCv1 2/6] pagewalk: Add a page table walker for init_mm page table Pasha Tatashin
2024-11-18 6:49 ` Christoph Hellwig
2024-11-18 10:32 ` Lorenzo Stoakes
2024-11-18 20:42 ` Pasha Tatashin
2024-11-16 17:59 ` [RFCv1 3/6] mm: Add a dump_page variant that accept log level argument Pasha Tatashin
2024-11-16 17:59 ` [RFCv1 4/6] misc/page_detective: Introduce Page Detective Pasha Tatashin
2024-11-16 22:20 ` Jonathan Corbet
2024-11-18 20:43 ` Pasha Tatashin
2024-11-18 11:11 ` Lorenzo Stoakes
2024-11-18 21:55 ` Jann Horn
2024-11-16 17:59 ` [RFCv1 5/6] misc/page_detective: enable loadable module Pasha Tatashin
2024-11-16 17:59 ` [RFCv1 6/6] selftests/page_detective: Introduce self tests for Page Detective Pasha Tatashin
2024-11-17 6:25 ` Muhammad Usama Anjum
2024-11-18 20:27 ` Pasha Tatashin
2024-11-18 11:17 ` Lorenzo Stoakes [this message]
2024-11-18 12:53 ` [RFCv1 0/6] " Jann Horn
2024-11-18 22:24 ` Pasha Tatashin
2024-11-19 0:39 ` Jann Horn
2024-11-19 1:29 ` Pasha Tatashin
2024-11-19 12:52 ` Jann Horn
2024-11-19 15:14 ` Pasha Tatashin
2024-11-19 15:53 ` Jann Horn
2024-11-19 18:51 ` Matthew Wilcox
2024-11-18 19:11 ` Roman Gushchin
2024-11-18 22:08 ` Pasha Tatashin
2024-11-19 1:09 ` Greg KH
2024-11-19 15:08 ` Pasha Tatashin
2024-11-19 18:23 ` Roman Gushchin
2024-11-19 19:30 ` Pasha Tatashin
2024-11-19 19:35 ` Yosry Ahmed
2024-11-19 20:57 ` Roman Gushchin
2024-11-20 16:13 ` Pasha Tatashin
2024-11-20 17:33 ` Yosry Ahmed
2024-11-20 17:46 ` Pasha Tatashin
2024-11-20 15:29 ` Andi Kleen
2024-11-20 16:40 ` Pasha Tatashin
2024-11-20 19:14 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a0372f7f-9a85-4d3e-ba20-b5911a8189e3@lucifer.local \
--to=lorenzo.stoakes@oracle.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=andrii@kernel.org \
--cc=arnd@arndb.de \
--cc=brauner@kernel.org \
--cc=cgroups@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=derek.kiernan@amd.com \
--cc=dragan.cvetic@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=gthelen@google.com \
--cc=hannes@cmpxchg.org \
--cc=jack@suse.cz \
--cc=jannh@google.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mhocko@kernel.org \
--cc=muchun.song@linux.dev \
--cc=oleg@redhat.com \
--cc=osalvador@suse.de \
--cc=pasha.tatashin@soleen.com \
--cc=peterx@redhat.com \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=ryan.roberts@arm.com \
--cc=schalla@marvell.com \
--cc=shakeel.butt@linux.dev \
--cc=shuah@kernel.org \
--cc=tandersen@netflix.com \
--cc=tj@kernel.org \
--cc=usama.anjum@collabora.com \
--cc=vattunuru@marvell.com \
--cc=vbabka@suse.cz \
--cc=vegard.nossum@oracle.com \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox