Cloudanix VulnDB

CVE-2026-89558

Critical · 9.8

CVSS

9.8

EPSS

0.6%

Published

Sep 11, 2026

CISA due date

—

Cloudanix analysis

Schedule a fix SSVC: Track

A storage software bug can cause some disks in a mirrored setup to be treated as fully up to date when they actually contain old information, silently corrupting data after certain disk failures are repaired.

Exploitation
Other
Attacker needs
Local User
Complexity
Moderate
Impact
Data Tampering
Component
OS kernel
Class
Other
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

In raid10_sync_request the conversion of still_degraded from int to bool inverted the assignment, so md_bitmap_start_sync is called with degraded==false while a mirror is still missing; this clears bitmap bits that the absent device requires, allowing subsequent recovery to skip regions and leave the re-added device marked In_sync with stale data, resulting in silent corruption.

Why it matters to the business

RAID10 arrays on affected kernels can silently corrupt data during recovery after multiple disk failures, leading to undetected data loss, application errors, and potential regulatory or operational impact in storage-heavy environments.

How an attack unfolds

An attacker with local or network access that can induce or observe degraded RAID10 states (for example by forcing disk removal or waiting for natural failures) writes to the array while two mirrors are down, then triggers re-add and recovery; the inverted flag causes bitmap bits to be cleared, so the second device skips all writes performed while degraded and surfaces with stale data.

How to fix it

Apply the upstream fix that restores the correct still_degraded=true assignment in raid10_sync_request (the same logic already present in raid1); rebuild and boot the corrected kernel on all affected systems before performing any RAID recovery operations.

How to confirm the fix worked

Confirm the patch is present by inspecting the raid10_sync_request function for the line still_degraded=true inside the loop that checks remaining degraded mirrors; after upgrade, re-run the supplied reproducer and verify that mismatch_cnt remains zero and recovery actually copies the expected regions.

Typical attack path

  1. Cause or wait for two disks (one from each mirror pair) to be removed from a near-layout RAID10 array with an internal bitmap
  2. Perform writes to the degraded array
  3. Re-add the failed disks and allow the kernel recovery thread to run
  4. Observe that recovery completes in milliseconds and subsequent array check reports mismatches or application data differs

How to detect it

Look in kernel logs for raid10 recovery events that complete in an unusually short time relative to the amount of data written while degraded; examine dmesg or syslog for md_bitmap and still_degraded references around the time of disk re-add events; compare mdadm --detail output showing In_sync flags against actual data checksums after recovery.

What your security team should do

  • Prioritize kernel upgrade on any system using md/raid10 with internal bitmaps
  • Temporarily avoid recovery of multi-disk failures until patched
  • Enable regular array checks (echo check > /sys/block/mdX/md/sync_action) after any recovery on unpatched kernels
  • Monitor EPSS and KEV status for changes that would accelerate patching timelines

The record

In the Linux kernel, the following vulnerability has been resolved: md/raid10: fix still_degraded being inverted in raid10_sync_request() Commit fe6a19d40ceb ("md/md-bitmap: merge md_bitmap_start_sync() into bitmap_operations") converted still_degraded from int to bool, but inverted the assignment in the loop that checks whether the array will still be degraded after the current device is recovered: "still_degraded = 1" became "still_degraded = false". As a result, recovering a device while another mirror is still missing calls md_bitmap_start_sync() with degraded == false, which clears bitmap bits that the still-missing device needs. When that device is re-added, its bitmap-based recovery finds the bits already cleared and skips every region written while the array was degraded, so it is marked In_sync while holding stale data: silent corruption. Reproducer (raid10 near=2, 4 disks, internal bitmap): - fail and remove one disk of each mirror pair - write to the degraded array - re-add both disks and let recovery finish - "check" reports mismatch_cnt=262272 after 256 MiB of degraded writes and file contents differ; the second disk's "recovery" completes in milliseconds because everything is skipped The same conversion in raid1 got it right (still_degraded = true). Restore the correct value.

Affected packages

Ecosystem Package Introduced Fixed