CVE-2026-68090 Overview
CVE-2026-68090 is a race condition in the Linux kernel's debugobjects subsystem. The flaw was reported by syzbot and resolved through a series of upstream kernel commits. The race occurs between debug_object_assert_init() (and debug_object_activate()) and a concurrent out-of-memory (OOM) event that disables debug objects and frees shadow objects. When the lookup path observes an error pointer from lookup_or_alloc(), the print step is skipped because debug_objects_enabled is already false, but the fixup callback still runs unconditionally. For timers this installs stub_timer() as the callback, rendering the timer nonfunctional.
Critical Impact
A concurrent OOM event can leave kernel timers with a stub callback after the debugobjects race, resulting in silently disfunctional timers and kernel warnings.
Affected Products
- Linux kernel (mainline) — kernel/debugobjects.c and kernel/time/hrtimer.c paths
- Stable trees receiving the fix commits 1f4f02b, 203a965, 23da32e, 2d5e320, b81dde1, c00164c, d663fbf, e2e255d
- Distributions shipping vulnerable stable kernels prior to backport
Discovery Timeline
- 2026-08-10 - CVE-2026-68090 published to NVD
- 2026-08-10 - Last updated in NVD database
Technical Details for CVE-2026-68090
Vulnerability Analysis
The Linux kernel's debugobjects infrastructure tracks the state of kernel objects (such as timers) using shadow objects allocated from a pool. When allocation fails under memory pressure, the subsystem globally disables itself by setting debug_objects_enabled = false and freeing all existing shadow objects.
Two entry points must tolerate statically initialized objects that have no shadow entry: debug_object_assert_init() and debug_object_activate(). Both call lookup_or_alloc(), which can return a valid pointer, NULL (signalling OOM), or an error pointer (signalling the object is not statically initialized). If a concurrent thread disables debugobjects and frees the pool between the initial debug_objects_enabled check and the lookup, the lookup returns an error pointer for what would otherwise be a static object.
The original code then bypassed the warning print, because the print helper re-checks debug_objects_enabled, but still invoked the fixup callback unconditionally. For hrtimers, hrtimer_fixup_assert_init() installs stub_timer() as the callback, producing the observed WARNING: kernel/time/hrtimer.c:443 at stub_timer+0xa/0x20 and leaving the timer inert.
Root Cause
The root cause is a Time-of-Check Time-of-Use (TOCTOU) race in debug_object_assert_init() and debug_object_activate(). The functions check debug_objects_enabled at entry, but the state can transition to disabled during the subsequent lookup. The fixup path did not re-validate the enabled flag before executing, breaking the invariant that fixups only run when debugobjects is active.
Attack Vector
This is a kernel-internal race triggered by memory pressure and concurrent object initialization. It is not a remote or unauthenticated attack vector. Exploitation requires the ability to induce OOM conditions on the debugobjects pool while another thread performs object assert/activate calls, a scenario observed by the syzbot fuzzer. The practical impact is denial of service through nonfunctional timers and misleading kernel warnings rather than privilege escalation or code execution.
See the upstream patch series (Kernel Patch Commit 1f4f02b, Kernel Patch Commit c00164c) for the exact source-level fix.
Detection Methods for CVE-2026-68090
Indicators of Compromise
- Kernel log entry ODEBUG: Out of memory. ODEBUG disabled shortly before timer-related warnings.
- Warning WARNING: kernel/time/hrtimer.c:443 at stub_timer+0xa/0x20 in dmesg or persistent kernel logs.
- Timers that silently stop firing after periods of memory pressure without an accompanying object-tracking warning.
Detection Strategies
- Parse dmesg and /var/log/kern.log for the ODEBUG disable message paired with subsequent stub_timer or debugobjects warnings.
- Correlate OOM events with kernel warnings in centralized log pipelines to identify hosts exposed to the race window.
- Run kernel version inventory checks against the fixed stable commits to identify unpatched systems.
Monitoring Recommendations
- Forward kernel ring buffer output to a centralized logging platform and alert on ODEBUG and stub_timer strings.
- Track memory pressure metrics (OOM kills, MemAvailable, slab pressure) on production kernels to identify hosts likely to trigger the race.
- Monitor kernel package versions across the fleet and flag hosts running kernels older than the backport containing the debugobjects fix.
How to Mitigate CVE-2026-68090
Immediate Actions Required
- Apply the vendor-provided kernel update that includes the debugobjects race fix on all Linux systems.
- Prioritize patching hosts that run with CONFIG_DEBUG_OBJECTS enabled, since only these builds are affected.
- Reboot patched systems to load the corrected kernel image.
Patch Information
The fix adds a re-check of debug_objects_enabled before invoking the print and fixup callbacks in debug_object_assert_init() and debug_object_activate(). The change is distributed across the following upstream commits: Kernel Patch Commit 1f4f02b, Kernel Patch Commit 203a965, Kernel Patch Commit 23da32e, Kernel Patch Commit 2d5e320, Kernel Patch Commit b81dde1, Kernel Patch Commit c00164c, Kernel Patch Commit d663fbf, and Kernel Patch Commit e2e255d. Consume the fix through your distribution's stable kernel update stream.
Workarounds
- If patching is not immediately possible and debugobjects is not required, rebuild the kernel with CONFIG_DEBUG_OBJECTS=n to eliminate the affected code path.
- Reduce exposure by mitigating memory pressure: right-size workloads, tune cgroup memory limits, and ensure sufficient swap or reserve.
- Restart affected services after any observed ODEBUG disabled event to restore timer functionality until the patched kernel is deployed.
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

