CVE-2026-23356 Overview
CVE-2026-23356 is a race condition vulnerability in the Linux kernel's DRBD (Distributed Replicated Block Device) subsystem. The vulnerability exists in the drbd_al_begin_io_nonblock() function, where a logic bug allows operations to proceed even when lc_get_cumulative() fails due to timing issues with lc_try_lock() from other code paths. This results in the code making incorrect assumptions about activity log extent references, potentially leading to kernel crashes and data integrity issues during active resync operations.
Critical Impact
This vulnerability can cause kernel crashes through a BUG_ON(refcnt == 0) trigger in lc_put(), and may compromise the mutual exclusivity guarantees between resync and application I/O operations, potentially leading to data corruption or loss.
Affected Products
- Linux Kernel (versions utilizing DRBD subsystem)
- Systems running DRBD-based distributed storage configurations
- High-availability storage clusters using DRBD replication
Discovery Timeline
- 2026-03-25 - CVE CVE-2026-23356 published to NVD
- 2026-03-25 - Last updated in NVD database
Technical Details for CVE-2026-23356
Vulnerability Analysis
The vulnerability stems from a race condition in the DRBD activity log management code. When drbd_al_begin_io_nonblock() checks whether lc_get_cumulative() should succeed while holding the device->al_lock spinlock, another code path may concurrently invoke lc_try_lock() with unfortunate timing. When this race occurs, the function logs a "LOGIC BUG" message but fails to return an error code, allowing subsequent code to proceed with invalid assumptions.
The consequences of this logic bug are twofold. First, during an active resync operation, the mutual exclusivity between resync operations and application I/O is no longer guaranteed, which can lead to data integrity issues. Second, when the affected request completes, it attempts to release activity log references it never actually acquired, triggering a BUG_ON(refcnt == 0) assertion in lc_put() that crashes the kernel.
Root Cause
The root cause is a failure to properly handle a race condition in the locking mechanism. The code optimistically assumed that if certain conditions appeared favorable, the lc_get_cumulative() operation would succeed. However, the lc_try_lock() call from another execution context could invalidate this assumption between the check and the actual operation—a classic time-of-check time-of-use (TOCTOU) vulnerability pattern.
The fix addresses this by:
- Not attempting to predict whether operations will succeed based on pre-conditions
- Handling both e == NULL and e->refcnt == 0 conditions gracefully in al_complete_io()
- Properly tracking "partially in activity log" states for requests crossing extent boundaries
- Returning appropriate error codes from drbd_al_begin_io_nonblock() when operations fail, allowing later retry attempts to resume from where they left off
Attack Vector
This vulnerability requires local access to a system running the affected Linux kernel with DRBD configured. The attack vector involves triggering the race condition between concurrent I/O operations and resync processes. While exploitation requires specific timing conditions, an attacker with local access could potentially:
- Craft I/O patterns that increase the likelihood of the race condition
- Trigger repeated attempts until the race is won
- Cause kernel crashes resulting in denial of service
- Potentially corrupt data during DRBD replication operations
The vulnerability is most exploitable in high-load scenarios where DRBD is actively resyncing data while application I/O continues.
Detection Methods for CVE-2026-23356
Indicators of Compromise
- Kernel log messages containing "LOGIC BUG for enr=" indicating the race condition has been triggered
- Kernel panic or crash dumps referencing lc_put() with a BUG_ON assertion failure
- Unexpected DRBD resync failures or data inconsistencies between nodes
- System instability during DRBD replication operations under heavy I/O load
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for "LOGIC BUG" messages from the DRBD subsystem
- Implement crash dump analysis to identify BUG_ON(refcnt == 0) triggers in lc_put()
- Deploy kernel tracing (ftrace, eBPF) to monitor drbd_al_begin_io_nonblock() function calls and return values
- Configure alerting for unexpected DRBD state changes or synchronization failures
Monitoring Recommendations
- Enable DRBD-specific logging at debug level during high-availability operations
- Monitor system stability metrics and correlate with DRBD activity periods
- Implement automated kernel log parsing for DRBD-related anomalies
- Track DRBD synchronization completion rates and durations for deviations from baseline
How to Mitigate CVE-2026-23356
Immediate Actions Required
- Apply the kernel patches from the official kernel git repository immediately
- Reduce I/O load on affected systems during DRBD resync operations as a temporary measure
- Schedule maintenance windows to apply kernel updates on DRBD cluster nodes
- Review DRBD cluster configurations and consider temporary failover arrangements during patching
Patch Information
The Linux kernel maintainers have released patches addressing this vulnerability across multiple stable kernel branches. The fix modifies drbd_al_begin_io_nonblock() to properly handle failure cases and tracks partial activity log states. Patches are available from the following kernel git commits:
- Kernel Git Commit #7752569
- Kernel Git Commit #ab14036
- Kernel Git Commit #d1ef3ae
- Kernel Git Commit #e91d8d6
- Kernel Git Commit #eef1390
- Kernel Git Commit #f558e54
Workarounds
- Temporarily reduce concurrent I/O operations during DRBD resync to lower race condition probability
- Consider pausing non-critical application I/O during scheduled DRBD synchronization windows
- Implement I/O throttling mechanisms to reduce contention on DRBD-managed devices
- Configure automatic failover in DRBD clusters to minimize service disruption from potential crashes
# Check current kernel version for DRBD vulnerability
uname -r
# Monitor for DRBD-related kernel log messages
dmesg | grep -i "drbd\|LOGIC BUG\|lc_put"
# Check DRBD status on affected systems
drbdadm status
# After patching, verify the new kernel is loaded
cat /proc/version
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


