Zhang Xiaoxu
275a3d2b94
cifs: Fix warning and UAF when destroy the MR list
...
[ Upstream commit 3e161c2791f8e661eed24a2c624087084d910215 ]
If the MR allocate failed, the MR recovery work not initialized
and list not cleared. Then will be warning and UAF when release
the MR:
WARNING: CPU: 4 PID: 824 at kernel/workqueue.c:3066 __flush_work.isra.0+0xf7/0x110
CPU: 4 PID: 824 Comm: mount.cifs Not tainted 6.1.0-rc5+ #82
RIP: 0010:__flush_work.isra.0+0xf7/0x110
Call Trace:
<TASK>
__cancel_work_timer+0x2ba/0x2e0
smbd_destroy+0x4e1/0x990
_smbd_get_connection+0x1cbd/0x2110
smbd_get_connection+0x21/0x40
cifs_get_tcp_session+0x8ef/0xda0
mount_get_conns+0x60/0x750
cifs_mount+0x103/0xd00
cifs_smb3_do_mount+0x1dd/0xcb0
smb3_get_tree+0x1d5/0x300
vfs_get_tree+0x41/0xf0
path_mount+0x9b3/0xdd0
__x64_sys_mount+0x190/0x1d0
do_syscall_64+0x35/0x80
entry_SYSCALL_64_after_hwframe+0x46/0xb0
BUG: KASAN: use-after-free in smbd_destroy+0x4fc/0x990
Read of size 8 at addr ffff88810b156a08 by task mount.cifs/824
CPU: 4 PID: 824 Comm: mount.cifs Tainted: G W 6.1.0-rc5+ #82
Call Trace:
dump_stack_lvl+0x34/0x44
print_report+0x171/0x472
kasan_report+0xad/0x130
smbd_destroy+0x4fc/0x990
_smbd_get_connection+0x1cbd/0x2110
smbd_get_connection+0x21/0x40
cifs_get_tcp_session+0x8ef/0xda0
mount_get_conns+0x60/0x750
cifs_mount+0x103/0xd00
cifs_smb3_do_mount+0x1dd/0xcb0
smb3_get_tree+0x1d5/0x300
vfs_get_tree+0x41/0xf0
path_mount+0x9b3/0xdd0
__x64_sys_mount+0x190/0x1d0
do_syscall_64+0x35/0x80
entry_SYSCALL_64_after_hwframe+0x46/0xb0
Allocated by task 824:
kasan_save_stack+0x1e/0x40
kasan_set_track+0x21/0x30
__kasan_kmalloc+0x7a/0x90
_smbd_get_connection+0x1b6f/0x2110
smbd_get_connection+0x21/0x40
cifs_get_tcp_session+0x8ef/0xda0
mount_get_conns+0x60/0x750
cifs_mount+0x103/0xd00
cifs_smb3_do_mount+0x1dd/0xcb0
smb3_get_tree+0x1d5/0x300
vfs_get_tree+0x41/0xf0
path_mount+0x9b3/0xdd0
__x64_sys_mount+0x190/0x1d0
do_syscall_64+0x35/0x80
entry_SYSCALL_64_after_hwframe+0x46/0xb0
Freed by task 824:
kasan_save_stack+0x1e/0x40
kasan_set_track+0x21/0x30
kasan_save_free_info+0x2a/0x40
____kasan_slab_free+0x143/0x1b0
__kmem_cache_free+0xc8/0x330
_smbd_get_connection+0x1c6a/0x2110
smbd_get_connection+0x21/0x40
cifs_get_tcp_session+0x8ef/0xda0
mount_get_conns+0x60/0x750
cifs_mount+0x103/0xd00
cifs_smb3_do_mount+0x1dd/0xcb0
smb3_get_tree+0x1d5/0x300
vfs_get_tree+0x41/0xf0
path_mount+0x9b3/0xdd0
__x64_sys_mount+0x190/0x1d0
do_syscall_64+0x35/0x80
entry_SYSCALL_64_after_hwframe+0x46/0xb0
Let's initialize the MR recovery work before MR allocate to prevent
the warning, remove the MRs from the list to prevent the UAF.
Fixes: c7398583340a ("CIFS: SMBD: Implement RDMA memory registration")
Acked-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Reviewed-by: Tom Talpey <tom@talpey.com>
Signed-off-by: Zhang Xiaoxu <zhangxiaoxu5@huawei.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-03-11 16:31:42 +01:00
..
2020-10-29 09:54:59 +01:00
2018-08-07 14:15:41 -05:00
2019-12-21 10:57:33 +01:00
2018-05-27 17:56:35 -05:00
2019-04-05 22:32:59 +02:00
2019-09-16 08:22:17 +02:00
2018-11-13 11:08:48 -08:00
2021-09-22 11:47:54 +02:00
2020-03-05 16:42:15 +01:00
2018-06-04 19:19:24 -05:00
2018-08-07 14:15:41 -05:00
2022-04-27 13:39:43 +02:00
2018-08-23 15:11:10 -05:00
2020-10-01 13:14:29 +02:00
2019-11-10 11:27:34 +01:00
2020-05-20 08:18:49 +02:00
2023-02-06 07:49:42 +01:00
2021-02-10 09:21:07 +01:00
2021-04-10 13:21:19 +02:00
2018-08-07 14:15:41 -05:00
2018-08-07 14:15:41 -05:00
2020-11-05 11:08:44 +01:00
2022-11-25 17:40:25 +01:00
2018-12-21 14:15:23 +01:00
2023-01-18 11:30:52 +01:00
2018-05-27 17:56:35 -05:00
2020-10-01 13:14:29 +02:00
2019-11-06 13:05:51 +01:00
2019-02-12 19:47:17 +01:00
2021-09-22 11:48:08 +02:00
2020-10-01 13:14:29 +02:00
2020-01-17 19:47:01 +01:00
2018-06-01 09:14:30 -05:00
2018-08-07 14:30:59 -05:00
2019-06-25 11:36:01 +08:00
2021-04-10 13:21:19 +02:00
2022-08-25 11:15:47 +02:00
2023-01-24 07:11:50 +01:00
2021-02-10 09:21:07 +01:00
2019-12-21 10:57:35 +01:00
2019-03-23 20:09:56 +01:00
2023-03-11 16:31:42 +01:00
2023-02-06 07:49:42 +01:00
2018-05-27 17:56:35 -05:00
2018-08-07 14:28:01 -05:00
2022-09-28 11:02:52 +02:00
2019-10-05 13:10:12 +02:00