CVE-2026-98833 Overview
CVE-2026-98833 is a Linux kernel vulnerability in the Memory Technology Device (MTD) subsystem. The flaw resides in __get_mtd_device(), which invokes the master's _get_device() callback using the partition MTD rather than the master MTD. The corresponding __put_mtd_device() function passes the master, creating an asymmetry between acquisition and release of device references. This mismatch breaks gluebi partitions because gluebi_get_device() relies on container_of() and requires the master MTD structure. Kernel maintainers resolved the issue by passing the master to _get_device() so both paths operate on identical references.
Critical Impact
Incorrect reference handling in MTD partition acquisition can corrupt device state tracking for UBI gluebi partitions, leading to kernel instability on systems using NAND or NOR flash with UBI.
Affected Products
- Linux kernel versions containing the pre-patch __get_mtd_device() implementation in drivers/mtd/mtdcore.c
- Systems using UBI (Unsorted Block Images) with the gluebi module
- Embedded Linux platforms relying on MTD partitions over raw flash
Discovery Timeline
- 2026-10-18 - CVE-2026-98833 published to NVD
- 2026-10-21 - Last updated in NVD database
Technical Details for CVE-2026-98833
Vulnerability Analysis
The Linux MTD core exposes __get_mtd_device() and __put_mtd_device() to acquire and release references to flash devices. When a caller requests a partition, __get_mtd_device() previously invoked the master device's _get_device() callback using the partition mtd pointer. The release path __put_mtd_device() instead passed the master device pointer to _put_device(). This created a mismatched pair of calls on different objects.
The gluebi module bridges UBI volumes to the MTD layer. Its gluebi_get_device() callback uses the container_of() macro to recover its private structure from the embedded mtd_info. When the kernel supplies a partition instead of the master, container_of() computes an incorrect base address, producing an invalid pointer dereference or state corruption inside UBI tracking logic.
Root Cause
The root cause is inconsistent argument passing between paired reference-counting callbacks in drivers/mtd/mtdcore.c. Callback contracts in the kernel require symmetric arguments for acquisition and release. The acquisition side passed the partition while the release side passed the master, violating that contract for drivers like gluebi that depend on container_of() resolution.
Attack Vector
Triggering the condition requires a system configured with UBI on top of MTD partitions and a workload that opens and closes gluebi-backed MTD devices. The vulnerability is a reliability and correctness defect in kernel device bookkeeping rather than a remotely reachable primitive. See the upstream fixes referenced below for the exact code path.
Technical details are available in the upstream fixes: Linux Kernel Commit 12b31d1, Linux Kernel Commit 95c8f36, Linux Kernel Commit d94731c, Linux Kernel Commit dc482a2, and Linux Kernel Commit f971f1c.
Detection Methods for CVE-2026-98833
Indicators of Compromise
- Kernel oops or NULL pointer dereference messages originating in gluebi_get_device or __get_mtd_device
- Unexpected UBI volume detach failures or stale device reference warnings in dmesg
- System hangs or module unload failures involving gluebi, ubi, or mtd after repeated open/close cycles
Detection Strategies
- Audit running kernel versions against the patched commits listed in the upstream references
- Enumerate systems where gluebi, ubi, and MTD partitions are loaded concurrently using lsmod and /proc/mtd
- Correlate kernel ring buffer events with UBI partition activity to identify systems exhibiting the fault pattern
Monitoring Recommendations
- Centralize kernel log collection from embedded and flash-backed Linux systems for crash signature review
- Alert on repeated BUG, WARN, or oops entries referencing MTD or UBI subsystems
- Track kernel package versions across the fleet to confirm patch rollout coverage
How to Mitigate CVE-2026-98833
Immediate Actions Required
- Inventory systems running UBI on MTD partitions and prioritize them for kernel updates
- Apply the stable kernel update that includes the fix passing the master MTD to _get_device()
- Reboot affected systems after kernel installation to activate the corrected module
Patch Information
The fix modifies __get_mtd_device() to pass the master MTD to the _get_device() callback, matching the behavior of __put_mtd_device(). The change is distributed across multiple stable branches as commits 12b31d1, 95c8f36, d94731c, dc482a2, and f971f1c. Downstream distributions should backport one of these commits depending on the maintained branch.
Workarounds
- Avoid loading the gluebi module on affected kernels where UBI-to-MTD bridging is not required
- Restrict administrative access to flash management utilities until patches are deployed
- Where possible, use UBI volumes directly without the gluebi compatibility shim
# Verify running kernel and MTD module state
uname -r
cat /proc/mtd
lsmod | grep -E 'gluebi|ubi|mtd'
# Example: unload gluebi where not required (test in a maintenance window)
modprobe -r gluebi
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

