[PATCH 2/3] md/raid5: Don't free conf on raid5_run failure

From: Zhihao Cheng

Date: Mon Sep 21 2026 - 03:27:23 EST


Set 'raid_disks' after raid5_run() failure will trigger an
null-ptr-deref problem:
BUG: kernel NULL pointer dereference, address: 0000000000000038
RIP: 0010:raid5_check_reshape+0xad
Call Trace:
update_raid_disks+0x124
raid_disks_store+0x145
md_attr_store+0xd7
sysfs_kf_write+0x7c

The trigger process is simple:
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
--force --assume-clean # create raid1
echo 5 > /sys/block/md0/md/level
level_store
mddev->pers = pers
mddev->private = priv
raid5_run
fail to abort (eg. raid5_create_ctx_pool fails)
mddev->private = NULL
echo 10 > /sys/block/md0/md/raid_disks
raid_disks_store
if (mddev->pers) // true
update_raid_disks
raid5_check_reshape
conf = mddev->private
conf->algorithm = mddev->new_layout // null-ptr-deref !
// similar process in do_md_stop->__md_stop_writes->raid5_quiesce

Just like commit 35f20acaa358 ("md/raid0: don't free conf on raid0_run
failure") does, fix it by not free conf on raid5_run failure.

Fixes: 245f46c2c221e ("md: add ->takeover method to support changing the personality managing an array")
Signed-off-by: Zhihao Cheng <chengzhihao1@xxxxxxxxxx>
---
drivers/md/raid5.c | 2 --
1 file changed, 2 deletions(-)

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 7e87e8a60f5f..913e5a709e35 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -8263,8 +8263,6 @@ static int raid5_run(struct mddev *mddev)
abort:
md_unregister_thread(mddev, &mddev->thread);
print_raid5_conf(conf);
- free_conf(conf);
- mddev->private = NULL;
pr_warn("md/raid:%s: failed to run raid set.\n", mdname(mddev));
return ret;
}
--
2.52.0