Skip to contentSkip to conversation

proc: proc_maps_open allow proc_mem_open to return NULL

PATCH Applied Jialin Wang 2 participants 3 messages Aug 7, 2025 – Aug 8, 2025

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 proc: proc_maps_open allow proc_mem_open to return NULL

The commit 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL") breaks perf record -g -p PID when profiling a kernel thread.

The strace of perf record -g -p $(pgrep kswapd0) shows:

openat(AT_FDCWD, "/proc/65/task/65/maps", O_RDONLY) = -1 ESRCH (No such process)

This patch partially reverts the commit to fix it.

Fixes 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL")
---
 fs/proc/task_mmu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
fs/proc/task_mmu.c +2 -2
index 3d6d8a9f13fc..7a7ce26106ac 100644
@@ -340,8 +340,8 @@ static int proc_maps_open(struct inode *inode, struct file *file,
 
 	priv->inode = inode;
 	priv->mm = proc_mem_open(inode, PTRACE_MODE_READ);
-	if (IS_ERR_OR_NULL(priv->mm)) {
-		int err = priv->mm ? PTR_ERR(priv->mm) : -ESRCH;
+	if (IS_ERR(priv->mm)) {
+		int err = PTR_ERR(priv->mm);
 
 		seq_release_private(inode, file);
 		return err;
Signature · 1 line
2.50.0
maintainer
#1 lore raw
Quoted 8 lines · On Fri, 8 Aug 2025 00:54:55 +0800 Jialin Wang <[email protected]> wrote:

The commit 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL") breaks perf record -g -p PID when profiling a kernel thread.

The strace of perf record -g -p $(pgrep kswapd0) shows:

openat(AT_FDCWD, "/proc/65/task/65/maps", O_RDONLY) = -1 ESRCH (No such process)

This patch partially reverts the commit to fix it.

Thanks. But "breaks" is a rather thin description of the problem!

Can you please describe the observed misbehavior fully?

Quoted 1 line
Fixes 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL")

Because we should backport this fix into 6.16.x -stable kernels. The -stable maintainers may wonder why we're requesting this. Also, any person who is having problems with their 6.16-based kernel will want such a description so they can decide whether this fix might address their problem.

Thanks.

#2 lore raw

PATCH v2 1/1 proc: proc_maps_open allow proc_mem_open to return NULL

The commit 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL") caused proc_maps_open() to return -ESRCH when proc_mem_open() returns NULL. This breaks legitimate /proc/<pid>/maps access for kernel threads since kernel threads have NULL mm_struct.

The regression causes perf to fail and exit when profiling a kernel thread:

  # perf record -v -g -p $(pgrep kswapd0)
  ...
  couldn't open /proc/65/task/65/maps

This patch partially reverts the commit to fix it.

Fixes 65c66047259f ("proc: fix the issue of proc_mem_open returning NULL")

---
Changes in v2 (Thanks to Andrew):
- Add more detailed misbehavior description in commit message

 fs/proc/task_mmu.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
fs/proc/task_mmu.c +2 -2
index 3d6d8a9f13fc..7a7ce26106ac 100644
@@ -340,8 +340,8 @@ static int proc_maps_open(struct inode *inode, struct file *file,
 
 	priv->inode = inode;
 	priv->mm = proc_mem_open(inode, PTRACE_MODE_READ);
-	if (IS_ERR_OR_NULL(priv->mm)) {
-		int err = priv->mm ? PTR_ERR(priv->mm) : -ESRCH;
+	if (IS_ERR(priv->mm)) {
+		int err = PTR_ERR(priv->mm);
 
 		seq_release_private(inode, file);
 		return err;
Signature · 1 line
2.50.0