CVE-2026-99136
NoneCVSS
—
EPSS
0.2%
Published
Oct 28, 2026
CISA due date
—
Cloudanix analysis
A small timing error in Linux disk encryption code can cause some failed disk operations to be reported as successful, which might let data problems go unnoticed.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- High
- Impact
- Data Tampering
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Race condition allows crypt_dec_pending to read a stale io->error value before the final reference drop, causing a failed encrypted I/O to be completed with success status instead of propagating the error.
Why it matters to the business
Encrypted block storage may silently discard write failures or return incorrect read results, risking data corruption, inconsistent file systems, or undetected loss of critical information on systems using dm-crypt.
How an attack unfolds
An attacker triggers concurrent I/O completion paths (for example via interrupt-driven endio) that set an error and release a reference between the error read and the atomic decrement in crypt_dec_pending, so the final bio completion reports success for a failed operation.
How to fix it
Upgrade the Linux kernel to a version containing the fix that moves the io->error read after atomic_dec_and_test; rebuild and reboot all affected systems; verify dm-crypt functionality after update.
How to confirm the fix worked
Confirm the corrected read-after-decrement logic is present in crypt_dec_pending; run concurrent error-injection tests on dm-crypt devices and verify error status is now correctly propagated.
Typical attack path
- Mount or access a dm-crypt encrypted device under load
- Induce I/O errors on the underlying storage while multiple contexts race on the same dm_crypt_io
- Force the window between io->error read and atomic_dec_and_test
- Observe successful completion status returned for the failed bio
How to detect it
Review kernel logs and dm-crypt trace points around I/O completion for unexpected success status on operations known to have encountered underlying errors; no persistent artifacts remain after the race window closes.
What your security team should do
- Prioritize kernel update on all systems using dm-crypt within the next maintenance window
- Monitor upstream stable and distribution kernel changelogs for the referenced commit
- Test dm-crypt error paths in staging environments before broad rollout
The record
In the Linux kernel, the following vulnerability has been resolved: dm-crypt: fix a tiny race condition in crypt_dec_pending crypt_dec_pending reads io->error before calling atomic_dec_and_test. Another context, for example crypt_endio called from an interrupt, may set io->error and drop its reference between the read and the decrement. crypt_dec_pending then drops the last reference and completes the bio with the stale status - so a read that failed and was never decrypted, or a write that failed, is reported as successful. The read was placed before the decrement by commit b35f8caa0890 ("dm crypt: wait for endio to complete before destruction"), because that commit freed dm_crypt_io before calling bio_endio. This is no longer the case, dm_crypt_io lives in the per-bio data now. Read io->error after atomic_dec_and_test instead. atomic_dec_and_test is fully ordered, so no additional barrier is needed.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|