Re: [PATCH] md/raid5: fix possible null-pointer dereferences in raid5_store_group_thread_cnt()

"Yu Kuai" <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Message-ID <[email protected]>
Hi,

在 2025/12/10 15:41, Tuo Li 写道:
> The variable mddev->private is first assigned to conf and then checked:
>
>    conf = mddev->private;
>    if (!conf) ...
>
> If conf is NULL, then mddev->private is also NULL. However, the function
> does not return at this point, and raid5_quiesce() is later called with
> mddev as the argument. Inside raid5_quiesce(), mddev->private is again
> assigned to conf, which is then dereferenced in multiple places, for
> example:
>
>    conf->quiesce = 0;
>    wake_up(&conf->wait_for_quiescent);
>    ...
>
> This can lead to several null-pointer dereferences.
>
> To fix these issues, the function should unlock mddev and return early when
> conf is NULL, following the pattern in raid5_change_consistency_policy().
>
> Signed-off-by: Tuo Li <[email protected]>
> ---
>   drivers/md/raid5.c | 7 ++++---
>   1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
> index e57ce3295292..be3f9a127212 100644
> --- a/drivers/md/raid5.c
> +++ b/drivers/md/raid5.c
> @@ -7190,9 +7190,10 @@ raid5_store_group_thread_cnt(struct mddev *mddev, const char *page, size_t len)
>   	raid5_quiesce(mddev, true);
>   
>   	conf = mddev->private;
> -	if (!conf)
> -		err = -ENODEV;
> -	else if (new != conf->worker_cnt_per_group) {
> +	if (!conf) {
> +		mddev_unlock_and_resume(mddev);
> +		return -ENODEV;

+CC Xiao

This is still wrong, please add the NULL check and return early before raid5_quise().
And also add a fix tag:

fa1944bbe622 md/raid5: Wait sync io to finish before changing group cnt

> +	} else if (new != conf->worker_cnt_per_group) {
>   		old_groups = conf->worker_groups;
>   		if (old_groups)
>   			flush_workqueue(raid5_wq);

-- 
Thansk,
Kuai
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.