]> git.baikalelectronics.ru Git - kernel.git/commit
proc: fix lookup in /proc/net subdirectories after setns(2)
authorAlexey Dobriyan <adobriyan@gmail.com>
Wed, 16 Dec 2020 04:42:39 +0000 (20:42 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 16 Dec 2020 06:46:15 +0000 (22:46 -0800)
commite0229f12f8f13c79b279a55ea62d47a3208a7931
treefcb5a5a16b327e37b1a67ee6af70fc1d1518c283
parentec3838bbcd695fde061c3eb7cc864917597179f1
proc: fix lookup in /proc/net subdirectories after setns(2)

Commit cb538d00dbe2 ("proc: fix /proc/net/* after setns(2)") only forced
revalidation of regular files under /proc/net/

However, /proc/net/ is unusual in the sense of /proc/net/foo handlers
take netns pointer from parent directory which is old netns.

Steps to reproduce:

(void)open("/proc/net/sctp/snmp", O_RDONLY);
unshare(CLONE_NEWNET);

int fd = open("/proc/net/sctp/snmp", O_RDONLY);
read(fd, &c, 1);

Read will read wrong data from original netns.

Patch forces lookup on every directory under /proc/net .

Link: https://lkml.kernel.org/r/20201205160916.GA109739@localhost.localdomain
Fixes: 20c860fde1ce ("proc: revalidate misc dentries")
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Reported-by: "Rantala, Tommi T. (Nokia - FI/Espoo)" <tommi.t.rantala@nokia.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/proc/generic.c
fs/proc/internal.h
fs/proc/proc_net.c
include/linux/proc_fs.h