TencentOS-kernel/fs/afs
David Howells e0447d57ee afs: Fix memory leak when mounting with multiple source parameters
[ Upstream commit 4cb682964706deffb4861f0a91329ab3a705039f ]

There's a memory leak in afs_parse_source() whereby multiple source=
parameters overwrite fc->source in the fs_context struct without freeing
the previously recorded source.

Fix this by only permitting a single source parameter and rejecting with
an error all subsequent ones.

This was caught by syzbot with the kernel memory leak detector, showing
something like the following trace:

  unreferenced object 0xffff888114375440 (size 32):
    comm "repro", pid 5168, jiffies 4294923723 (age 569.948s)
    backtrace:
      slab_post_alloc_hook+0x42/0x79
      __kmalloc_track_caller+0x125/0x16a
      kmemdup_nul+0x24/0x3c
      vfs_parse_fs_string+0x5a/0xa1
      generic_parse_monolithic+0x9d/0xc5
      do_new_mount+0x10d/0x15a
      do_mount+0x5f/0x8e
      __do_sys_mount+0xff/0x127
      do_syscall_64+0x2d/0x3a
      entry_SYSCALL_64_after_hwframe+0x44/0xa9

Fixes: 13fcc6837049 ("afs: Add fs_context support")
Reported-by: syzbot+86dc6632faaca40133ab@syzkaller.appspotmail.com
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-03-16 16:42:27 +08:00
..
Kconfig Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
Makefile Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
addr_list.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
afs.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
afs_cm.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
afs_fs.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
afs_vl.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cache.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
callback.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
cell.c afs: Fix storage of cell names 2021-03-16 16:31:03 +08:00
cmservice.c afs: Fix to actually set AFS_SERVER_FL_HAVE_EPOCH 2021-03-16 16:27:06 +08:00
dir.c afs: Always include dir in bulk status fetch from afs_do_lookup() 2021-03-16 16:30:37 +08:00
dir_edit.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
dir_silly.c afs: Fix race between post-modification dir edit and readdir/d_revalidate 2021-03-16 16:26:31 +08:00
dynroot.c afs: Fix NULL deref in afs_dynroot_depopulate() 2021-03-16 16:34:40 +08:00
file.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
flock.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
fs_probe.c rxrpc: Make rxrpc_kernel_get_srtt() indicate validity 2021-03-16 16:35:28 +08:00
fsclient.c afs: Set error flag rather than return error from file status decode 2021-03-16 16:30:38 +08:00
inode.c afs: Fix EOF corruption 2021-03-16 16:30:37 +08:00
internal.h afs: Fix storage of cell names 2021-03-16 16:31:03 +08:00
main.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
misc.c afs: Fix the mapping of the UAEOVERFLOW abort code 2021-03-16 16:30:38 +08:00
mntpt.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
proc.c afs: Fix memory leak in afs_put_sysnames() 2021-03-16 16:30:33 +08:00
protocol_uae.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
protocol_yfs.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
rotate.c afs: Make record checking use TASK_UNINTERRUPTIBLE when appropriate 2021-03-16 16:27:06 +08:00
rxrpc.c afs: Set error flag rather than return error from file status decode 2021-03-16 16:30:38 +08:00
security.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
server.c afs: Make record checking use TASK_UNINTERRUPTIBLE when appropriate 2021-03-16 16:27:06 +08:00
server_list.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
super.c afs: Fix memory leak when mounting with multiple source parameters 2021-03-16 16:42:27 +08:00
vl_list.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
vl_probe.c rxrpc: Make rxrpc_kernel_get_srtt() indicate validity 2021-03-16 16:35:28 +08:00
vl_rotate.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
vlclient.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
volume.c afs: Make record checking use TASK_UNINTERRUPTIBLE when appropriate 2021-03-16 16:27:06 +08:00
write.c afs: afs_write_end() should change i_size under the right lock 2021-03-16 16:30:37 +08:00
xattr.c Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
xdr_fs.h Init Repo base on linux 5.4.32 long term, and add base tlinux kernel interfaces. 2021-03-16 11:01:34 +08:00
yfsclient.c afs: Fix warning due to unadvanced marshalling pointer 2021-03-16 16:40:37 +08:00