CVE-2026-90400

Source
https://cve.org/CVERecord?id=CVE-2026-90400
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-90400.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-90400
Downstream
Published
2026-09-17T16:09:30Z
Modified
2026-09-18T03:48:38Z
Summary
md: recheck spare changes before starting sync
Details

In the Linux kernel, the following vulnerability has been resolved:

md: recheck spare changes before starting sync

remove_spares() and remove_and_add_spares() modify the array's rdev configuration. These operations are only safe after the array has been suspended.

md_start_sync() checks whether spare configuration changes are needed before taking reconfig_mutex. However, the rdev state can change before the mutex is acquired, so the initial check can become stale. In that case, md_choose_sync_action() may remove or replace rdevs while normal I/O is still accessing them.

The race can occur as follows:

raid10d Worker Normal IO


                                         raid10_write_request()
                                         wait_blocked_dev()

set Blocked set Faulty Skip Faulty rdev rrdev->nr_pending++ .repl_bio = bio removeable_rdev = false . array not suspended . lock mddev goto err_handle lock mddev (wait) . update sb . clear Blocked . . unlock mddev . lock mddev (acquires) remove_spares() removeable_rdev = true

             raid10_remove_disk()
             rdev = replacement
             replacement = NULL
                                         rdev_dec_pending(NULL)
             unlock mddev                (NULL)->nr_pending--

In this case, rdev_dec_pending() is called with a NULL pointer, resulting in a NULL pointer dereference when attempting to decrement nr_pending.

Fix this by suspending the array when spare configuration changes are needed, including for non-read-write arrays, and checking again after taking reconfig_mutex. If the array was not already suspended and a change is now needed, release the mutex, suspend the array, and reacquire the mutex before continuing.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/90xxx/CVE-2026-90400.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
bc08041b32abe6c9824f78735bac22018eabfc06
Fixed
c3777d16bc3335c0ac4bdad0551c80d38c5d94cc
Fixed
e5ac7ab78467b064f1da8b0f3042a63595fafcfd
Fixed
81b39df5d701976cf20e52f33106c1fc1603b4cb
Fixed
c7d34d17ea43ebc86b45d439ebb435e11ca44bca

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-90400.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.110
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.52
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.2.6

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-90400.json"