diff options
| author | Zhihao Cheng <chengzhihao1@huawei.com> | 2026-09-22 11:05:38 +0800 |
|---|---|---|
| committer | Yu Kuai <yukuai@fygo.io> | 2026-10-05 00:01:16 +0800 |
| commit | 4c90b76e0198deb89376988daa8d96b48bea7fcf (patch) | |
| tree | 7340e32efefbe0c0086cae04a1af25f18ba3a027 /tools/lib/python | |
| parent | 73b0df929494522acf9ccc8dafea4f721166965b (diff) | |
md: Fix the null-ptr-deref of 'mddev->private' while submitting IO
Concurrent processes md_stop and IO submission can trigger a NULL
pointer dereference of mddev->private:
BUG: kernel NULL pointer dereference, address: 0000000000000070
RIP: 0010:_wait_barrier+0x2f/0x250
Call Trace:
raid1_make_request+0x150/0xf50
md_handle_request+0x104/0x530
md_submit_bio+0x76/0x130
submit_bio+0xdd/0x250
submit_bio_wait+0x1f/0x40
__blkdev_direct_IO_simple+0x1f6/0x370
blkdev_write_iter+0x3b2/0x520
ksys_write+0x7d/0x190
One process can submit I/O through an open file while a forked process
uses the same file to issue STOP_ARRAY. The opener check permits this
because md_open() was called only once. do_md_stop() can then clear
mddev->private while the I/O is entering the personality make_request
callback.
This affects raid0, raid1, raid10, and raid5. Suspend STOP_ARRAY while
holding the reconfiguration lock so teardown waits for active_io
references to drain. Fail I/O in md_handle_request() if mddev->pers is
NULL after the array resumes.
The sysfs stopping paths are protected by
mddev_set_closing_and_sync_blockdev(). Apply that protection to both
clear and inactive transitions even when the array is read-only.
dm-raid teardown is already invoked with the device suspended.
Fetch a reproducer in
https://bugzilla.kernel.org/show_bug.cgi?id=222020
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by: syzbot+3fe892ea5fc292e1353f@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=3fe892ea5fc292e1353f
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Link: https://patch.msgid.link/20260922030538.1634904-1-chengzhihao1@huawei.com
Signed-off-by: Yu Kuai <yukuai@fygo.io>
Diffstat (limited to 'tools/lib/python')
0 files changed, 0 insertions, 0 deletions
