Skip to content

Commit 6986b1c

Browse files
Zizhi Wokernel-patches-daemon
authored andcommitted
null_blk: initialize lock mutex before registering configfs subsystem
In null_init(), mutex_init(&lock) currently happens after configfs_register_subsystem(), which exposes the nullb subsystem to userspace. A racing mkdir() into /sys/kernel/config/nullb/ can reach null_find_dev_by_name() -> mutex_lock(&lock) before the mutex is initialized, trigger warning: [ 123.137788] DEBUG_LOCKS_WARN_ON(lock->magic != lock) [ 123.137796] WARNING: kernel/locking/mutex.c:159 at mutex_lock+0x171/0x1c0, CPU#13: mkdir/1301 [ 123.140090] Modules linked in: null_blk(+) nft_fib_inet nft_fib_ipv4 ...... [ 123.154926] Call Trace: [ 123.155172] <TASK> [ 123.155419] ? __pfx_mutex_lock+0x10/0x10 [ 123.156181] ? __pfx__raw_spin_lock+0x10/0x10 [ 123.156571] nullb_group_make_group+0x20/0x100 [null_blk] [ 123.157011] configfs_mkdir+0x47b/0xc70 [ 123.157337] ? __pfx_configfs_mkdir+0x10/0x10 [ 123.157719] ? may_create_dentry+0x242/0x2e0 [ 123.158061] vfs_mkdir+0x2a9/0x6c0 [ 123.158352] filename_mkdirat+0x3dc/0x500 [ 123.158710] ? __pfx_filename_mkdirat+0x10/0x10 [ 123.159070] ? strncpy_from_user+0x3a/0x1d0 [ 123.159413] __x64_sys_mkdir+0x6b/0x90 [ 123.159760] do_syscall_64+0xea/0x600 Move mutex_init(&lock) before configfs_register_subsystem(). Fixes: 49c3b92 ("block: null_blk: Improve device creation with configfs") Signed-off-by: Zizhi Wo <wozizhi@huawei.com>
1 parent a644c13 commit 6986b1c

1 file changed

Lines changed: 1 addition & 2 deletions

File tree

drivers/block/null_blk/main.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2161,13 +2161,12 @@ static int __init null_init(void)
21612161

21622162
config_group_init(&nullb_subsys.su_group);
21632163
mutex_init(&nullb_subsys.su_mutex);
2164+
mutex_init(&lock);
21642165

21652166
ret = configfs_register_subsystem(&nullb_subsys);
21662167
if (ret)
21672168
return ret;
21682169

2169-
mutex_init(&lock);
2170-
21712170
null_major = register_blkdev(0, "nullb");
21722171
if (null_major < 0) {
21732172
ret = null_major;

0 commit comments

Comments
 (0)