Re: [PATCH] md/raid0: fix NULL pointer dereference in create_strip_zones() for dm-raid

"Yu Kuai" <[email protected]>
Newsgroups gmane.linux.raid,gmane.linux.kernel
Organization fnnas
Message-ID <[email protected]>
在 2025/11/16 10:18, Yu Kuai 写道:
> Commit 2107457e31fa ("md/raid0: Move queue limit setup before r0conf
> initialization") dereference mddev->gendisk unconditionally, which is
> NULL for dm-raid.
>
> Fix this problem by reverting to old codes for dm-raid.
>
> Fixes: 2107457e31fa ("md/raid0: Move queue limit setup before r0conf initialization")
> Reported-and-tested-by: Changhui Zhong <[email protected]>
> Closes: https://lore.kernel.org/all/CAGVVp+VqVnvGeneUoTbYvBv2cw6GwQRrR3B-iQ-_9rVfyumoKA@mail.gmail.com/
> Signed-off-by: Yu Kuai <[email protected]>
> ---
>   drivers/md/raid0.c | 9 ++++++++-
>   1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c
> index 47aee1b1d4d1..985c377356eb 100644
> --- a/drivers/md/raid0.c
> +++ b/drivers/md/raid0.c
> @@ -68,7 +68,10 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
>   	struct strip_zone *zone;
>   	int cnt;
>   	struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
> -	unsigned int blksize = queue_logical_block_size(mddev->gendisk->queue);
> +	unsigned int blksize = 512;
> +
> +	if (!mddev_is_dm(mddev))
> +		blksize = queue_logical_block_size(mddev->gendisk->queue);
>   
>   	*private_conf = ERR_PTR(-ENOMEM);
>   	if (!conf)
> @@ -84,6 +87,10 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
>   		sector_div(sectors, mddev->chunk_sectors);
>   		rdev1->sectors = sectors * mddev->chunk_sectors;
>   
> +		if (mddev_is_dm(mddev))
> +			blksize = max(blksize, queue_logical_block_size(
> +				      rdev1->bdev->bd_disk->queue));
> +
>   		rdev_for_each(rdev2, mddev) {
>   			pr_debug("md/raid0:%s:   comparing %pg(%llu)"
>   				 " with %pg(%llu)\n",

Applied to md-6.19

-- 
Thanks,
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.