summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorAndrii Nakryiko <andrii@kernel.org>2020-10-14 13:45:28 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-10-29 10:11:37 +0100
commit9bd6d3879f832d1fb4c01e19a63c1eaedb5a173d (patch)
tree6b295626492e8d45473715ce0b0806a92f9a3e68 /tools
parentc3781a532003cfe3cb8638c3e40e57d0e72b01d5 (diff)
downloadlinux-stable-9bd6d3879f832d1fb4c01e19a63c1eaedb5a173d.tar.gz
linux-stable-9bd6d3879f832d1fb4c01e19a63c1eaedb5a173d.tar.bz2
linux-stable-9bd6d3879f832d1fb4c01e19a63c1eaedb5a173d.zip
fs: fix NULL dereference due to data race in prepend_path()
[ Upstream commit 09cad07547445bf3a41683e4d3abcd154c123ef5 ] Fix data race in prepend_path() with re-reading mnt->mnt_ns twice without holding the lock. is_mounted() does check for NULL, but is_anon_ns(mnt->mnt_ns) might re-read the pointer again which could be NULL already, if in between reads one of kern_unmount()/kern_unmount_array()/umount_tree() sets mnt->mnt_ns to NULL. This is seen in production with the following stack trace: BUG: kernel NULL pointer dereference, address: 0000000000000048 ... RIP: 0010:prepend_path.isra.4+0x1ce/0x2e0 Call Trace: d_path+0xe6/0x150 proc_pid_readlink+0x8f/0x100 vfs_readlink+0xf8/0x110 do_readlinkat+0xfd/0x120 __x64_sys_readlinkat+0x1a/0x20 do_syscall_64+0x42/0x110 entry_SYSCALL_64_after_hwframe+0x44/0xa9 Fixes: f2683bd8d5bd ("[PATCH] fix d_absolute_path() interplay with fsmount()") Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Reviewed-by: Josef Bacik <josef@toxicpanda.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions