In the Linux kernel, the following vulnerability has been resolved:
md/raid10: fix null-ptr-deref in raid10syncrequest
initresync() inits mempool and sets conf->havereplacemnt at the beginning of sync, close_sync() frees the mempool when sync is completed.
After [1] recovery might be skipped and initresync() is called but closesync() is not. null-ptr-deref occurs with r10bio->dev[i].repl_bio.
The following is one way to reproduce the issue.
1) create a array, wait for resync to complete, mddev->recoverycp is set to MaxSector. 2) recovery is woken and it is skipped. conf->havereplacement is set to 0 in initresync(). closesync() not called. 3) some io errors and rdev A is set to WantReplacement. 4) a new device is added and set to A's replacement. 5) recovery is woken, A have replacement, but conf->havereplacemnt is 0. r10bio->dev[i].replbio will not be alloced and null-ptr-deref occurs.
Fix it by not calling init_resync() if recovery skipped.
[1] commit 7e83ccbecd60 ("md/raid10: Allow skipping recovery when clean arrays are assembled")
{
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/53xxx/CVE-2023-53832.json",
"cna_assigner": "Linux"
}