Skip to content

Commit 9e3072e

Browse files
GuoqingJiangNeilBrown
authored andcommitted
md-cluster: init suspend_list and suspend_lock early in join
If the node just join the cluster, and receive the msg from other nodes before init suspend_list, it will cause kernel crash due to NULL pointer dereference, so move the initializations early to fix the bug. md-cluster: Joined cluster 3578507b-e0cb-6d4f-6322-696cd7b1b10c slot 3 BUG: unable to handle kernel NULL pointer dereference at (null) ... ... ... Call Trace: [<ffffffffa0444924>] process_recvd_msg+0x2e4/0x330 [md_cluster] [<ffffffffa0444a06>] recv_daemon+0x96/0x170 [md_cluster] [<ffffffffa045189d>] md_thread+0x11d/0x170 [md_mod] [<ffffffff810768c4>] kthread+0xb4/0xc0 [<ffffffff8151927c>] ret_from_fork+0x7c/0xb0 ... ... ... RIP [<ffffffffa0443581>] __remove_suspend_info+0x11/0xa0 [md_cluster] Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: NeilBrown <neilb@suse.com>
1 parent b5ef567 commit 9e3072e

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

drivers/md/md-cluster.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,8 @@ static int join(struct mddev *mddev, int nodes)
671671
if (!cinfo)
672672
return -ENOMEM;
673673

674+
INIT_LIST_HEAD(&cinfo->suspend_list);
675+
spin_lock_init(&cinfo->suspend_lock);
674676
init_completion(&cinfo->completion);
675677

676678
mutex_init(&cinfo->sb_mutex);
@@ -736,9 +738,6 @@ static int join(struct mddev *mddev, int nodes)
736738
goto err;
737739
}
738740

739-
INIT_LIST_HEAD(&cinfo->suspend_list);
740-
spin_lock_init(&cinfo->suspend_lock);
741-
742741
ret = gather_all_resync_info(mddev, nodes);
743742
if (ret)
744743
goto err;

0 commit comments

Comments
 (0)