Description
In the Linux kernel, the following vulnerability has been resolved: md/raid10: fix null-ptr-deref in raid10_sync_request init_resync() inits mempool and sets conf->have_replacemnt at the beginning of sync, close_sync() frees the mempool when sync is completed. After [1] recovery might be skipped and init_resync() is called but close_sync() 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->recovery_cp is set to MaxSector. 2) recovery is woken and it is skipped. conf->have_replacement is set to 0 in init_resync(). close_sync() 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->have_replacemnt is 0. r10bio->dev[i].repl_bio 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")
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
7e83ccbecd608b971f340e951c9e84cd0343002f to < 38d33593260536840b49fd1dcac9aedfd14a9d42affected7e83ccbecd608b971f340e951c9e84cd0343002f to < 14964127be77884003976a392c9faa9ebaabbbe1affected7e83ccbecd608b971f340e951c9e84cd0343002f to < bdbf104b1c91fbf38f82c522ebf75429f094292aaffected7e83ccbecd608b971f340e951c9e84cd0343002f to < 68695084077e3de9d3e94e09238ace2b6f246446affected7e83ccbecd608b971f340e951c9e84cd0343002f to < b50fd1c3d9d0175aa29ff2706ef36cc178bc356aaffected7e83ccbecd608b971f340e951c9e84cd0343002f to < 99b503e4edc5938885d839cf0e7571963f75d800affected7e83ccbecd608b971f340e951c9e84cd0343002f to < 9e9efc77efd1956cc244af975240f2513d78a371affected7e83ccbecd608b971f340e951c9e84cd0343002f to < a405c6f0229526160aa3f177f65e20c86fce84c5affected
Linux Linux
Default version status: affected
3.10affected0 to < 3.10unaffected4.19.283 to ≤ 4.19.*unaffected5.4.243 to ≤ 5.4.*unaffected5.10.180 to ≤ 5.10.*unaffected5.15.111 to ≤ 5.15.*unaffected6.1.28 to ≤ 6.1.*unaffected6.2.15 to ≤ 6.2.*unaffected6.3.2 to ≤ 6.3.*unaffected6.4 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/38d33593260536840b49fd1dcac9aedfd14a9d42 ↗
- https://git.kernel.org/stable/c/14964127be77884003976a392c9faa9ebaabbbe1 ↗
- https://git.kernel.org/stable/c/bdbf104b1c91fbf38f82c522ebf75429f094292a ↗
- https://git.kernel.org/stable/c/68695084077e3de9d3e94e09238ace2b6f246446 ↗
- https://git.kernel.org/stable/c/b50fd1c3d9d0175aa29ff2706ef36cc178bc356a ↗
- https://git.kernel.org/stable/c/99b503e4edc5938885d839cf0e7571963f75d800 ↗
- https://git.kernel.org/stable/c/9e9efc77efd1956cc244af975240f2513d78a371 ↗
- https://git.kernel.org/stable/c/a405c6f0229526160aa3f177f65e20c86fce84c5 ↗