[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <698d1e9a-2fc0-fa6b-2f4c-55c5129cdf28@huaweicloud.com>
Date: Tue, 10 Jun 2025 10:52:30 +0800
From: Yu Kuai <yukuai1@...weicloud.com>
To: Wang Jinchao <wangjinchao600@...il.com>, Song Liu <song@...nel.org>
Cc: linux-raid@...r.kernel.org, linux-kernel@...r.kernel.org,
"yukuai (C)" <yukuai3@...wei.com>
Subject: Re: [PATCH] md/raid1: Fix use-after-free in reshape pool wait queue
Hi,
在 2025/06/09 20:01, Wang Jinchao 写道:
> During raid1 reshape operations, a use-after-free can occur in the mempool
> wait queue when r1bio_pool->curr_nr drops below min_nr. This happens
> because:
Can you attach have the uaf log?
>
> 1. mempool_init() initializes wait queue head on stack
> 2. The stack-allocated wait queue is copied to conf->r1bio_pool through
> structure assignment
> 3. wake_up() on this invalid wait queue causes panic when accessing the
> stack memory that no longer exists
The list_head inside wait_queue_head?
>
> Fix this by properly reinitializing the mempool's wait queue using
> init_waitqueue_head(), ensuring the wait queue structure remains valid
> throughout the reshape operation.
>
> Signed-off-by: Wang Jinchao <wangjinchao600@...il.com>
> ---
> drivers/md/raid1.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 19c5a0ce5a40..fd4ce2a4136f 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -3428,6 +3428,7 @@ static int raid1_reshape(struct mddev *mddev)
> /* ok, everything is stopped */
> oldpool = conf->r1bio_pool;
> conf->r1bio_pool = newpool;
> + init_waitqueue_head(&conf->r1bio_pool.wait);
I think the real problem here is the above assignment,it's better to
fix that instead of reinitializing the list.
Thanks,
Kuai
>
> for (d = d2 = 0; d < conf->raid_disks; d++) {
> struct md_rdev *rdev = conf->mirrors[d].rdev;
>
Powered by blists - more mailing lists