From 43a07d84dad8dbf1ed7dd13caaa5232d526ad951 Mon Sep 17 00:00:00 2001 From: Todd Kjos Date: Mon, 6 Nov 2023 18:12:08 +0000 Subject: [PATCH] Revert "proc: allow pid_revalidate() during LOOKUP_RCU" This reverts commit da4d6b9cf80ae5b0083f640133b85b68b53b6497. Appears to cause stale dcache entries for inodes in /proc/$pid filesystem resulting in ESRCH failures on access to files under /proc/self Bug: 305682813 Bug: 306055483 Signed-off-by: Todd Kjos Change-Id: I004338c043d7e777fdfef343e45ccb20ff4d503b --- fs/proc/base.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index 6d549f98d8c9..8f5abdc5832a 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2022,21 +2022,19 @@ static int pid_revalidate(struct dentry *dentry, unsigned int flags) { struct inode *inode; struct task_struct *task; - int ret = 0; - rcu_read_lock(); - inode = d_inode_rcu(dentry); - if (!inode) - goto out; - task = pid_task(proc_pid(inode), PIDTYPE_PID); + if (flags & LOOKUP_RCU) + return -ECHILD; + + inode = d_inode(dentry); + task = get_proc_task(inode); if (task) { pid_update_inode(task, inode); - ret = 1; + put_task_struct(task); + return 1; } -out: - rcu_read_unlock(); - return ret; + return 0; } static inline bool proc_inode_is_dead(struct inode *inode)