diff options
| author | Alexey Dobriyan <[email protected]> | 2022-05-10 01:29:19 +0000 |
|---|---|---|
| committer | akpm <[email protected]> | 2022-05-10 01:29:19 +0000 |
| commit | 7055197705709c59b8ab77e6a5c7d46d61edd96e (patch) | |
| tree | 4040061d0b55c45fbd02389c9f354a0b6ced1864 /fs/proc/generic.c | |
| parent | fs: sysv: check sbi->s_firstdatazone in complete_read_super (diff) | |
| download | kernel-7055197705709c59b8ab77e6a5c7d46d61edd96e.tar.gz kernel-7055197705709c59b8ab77e6a5c7d46d61edd96e.zip | |
proc: fix dentry/inode overinstantiating under /proc/${pid}/net
When a process exits, /proc/${pid}, and /proc/${pid}/net dentries are
flushed. However some leaf dentries like /proc/${pid}/net/arp_cache
aren't. That's because respective PDEs have proc_misc_d_revalidate() hook
which returns 1 and leaves dentries/inodes in the LRU.
Force revalidation/lookup on everything under /proc/${pid}/net by
inheriting proc_net_dentry_ops.
[[email protected]: coding-style cleanups]
Link: https://lkml.kernel.org/r/[email protected]
Fixes: c6c75deda813 ("proc: fix lookup in /proc/net subdirectories after setns(2)")
Signed-off-by: Alexey Dobriyan <[email protected]>
Reported-by: hui li <[email protected]>
Cc: Al Viro <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Diffstat (limited to 'fs/proc/generic.c')
| -rw-r--r-- | fs/proc/generic.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index f2132407e133..587b91d9d998 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c @@ -448,6 +448,9 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent, proc_set_user(ent, (*parent)->uid, (*parent)->gid); ent->proc_dops = &proc_misc_dentry_ops; + /* Revalidate everything under /proc/${pid}/net */ + if ((*parent)->proc_dops == &proc_net_dentry_ops) + pde_force_lookup(ent); out: return ent; |
