CVE-2026-31687
Medium · 5.5CVSS
5.5
EPSS
0.1%
Published
Apr 27, 2026
CISA due date
—
Cloudanix analysis
Some Linux-based devices using specific OMAP hardware can be made to freeze or stop working until they are restarted.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Denial of service
- Remediation
- Patch
- Effort
- Low
- Patch risk
- Low
What it actually does
This is a local denial-of-service flaw in the Linux kernel OMAP GPIO/MPUIO driver path. The vulnerable code registers the omap_mpuio_driver from inside another driver's probe callback while the device core may already hold a device lock. On affected ARM OMAP-based systems, this can create a driver-core locking deadlock, hang kernel execution paths, or leave stale driver state because the MPUIO driver is not unregistered on module unload. The impact is availability loss only; the provided CVSS vector does not indicate confidentiality or integrity compromise.
Why it matters to the business
Systems that depend on affected Linux kernel builds and OMAP GPIO hardware may become unstable, hang, or require reboot if the vulnerable driver path is triggered. This is most relevant to embedded, industrial, IoT, telecom, or appliance-like Linux deployments using OMAP platforms. Exploitation requires local access with low privileges, EPSS is very low, there is no known CISA KEV listing, and no mature public exploit is indicated, so broad internet-scale exploitation is unlikely; however, the operational impact can still be significant for devices where physical processes, uptime, or remote recoverability matter.
How an attack unfolds
An attacker first needs local access to an affected Linux system, such as a shell, compromised local account, container escape path with sufficient device interaction, or other ability to influence kernel driver/module behavior. The attacker then triggers the OMAP GPIO/MPUIO driver initialization, probing, reprobe, or module load/unload sequence on hardware and kernel builds that include the vulnerable code. Because the driver registration is performed from within another driver's probe callback, the kernel driver core can attempt matching or registration while a device lock is already held. This can produce a deadlock or stuck kernel task, resulting in service disruption, degraded device functionality, or a system hang that may require a reboot or power cycle. There is no indication that this flaw directly enables code execution, privilege escalation, data theft, or ransomware-style activity.
How to fix it
Upgrade to a Linux kernel version that includes the upstream fix moving omap_mpuio_driver registration to the module init path and unregistering it during module exit. Because no exact fixed versions were provided, use vendor kernel advisories for the relevant distribution, device vendor, board support package, or long-term-stable kernel branch. Prioritize embedded and appliance deployments using ARM OMAP platforms or kernels with CONFIG_GPIO_OMAP/OMAP MPUIO support. If immediate patching is not possible, reduce local attack surface by limiting shell access, restricting module load/unload capabilities, disabling unnecessary GPIO/MPUIO functionality where operationally safe, enforcing least privilege, and preventing untrusted workloads from accessing host device nodes or kernel module controls.
How to confirm the fix worked
Confirm exposure by checking whether the running kernel includes the vulnerable OMAP GPIO/MPUIO code path and whether the platform actually uses OMAP GPIO hardware. Validate remediation by verifying the installed kernel package or source tree contains the fix that registers omap_mpuio_driver from module init and unregisters it from module exit, rather than from omap_gpio_probe(). On Linux systems, review the running kernel version with uname -a, verify vendor package changelogs/advisories, inspect kernel configuration for OMAP GPIO support, and check whether relevant modules are loaded. After patching, perform controlled regression testing for GPIO functionality, module load/unload behavior, suspend/resume if applicable, and boot-time driver probing to ensure no hung tasks or lock warnings occur.
Typical attack path
- Obtain local access to an affected Linux system using an account or execution context that can interact with relevant device/module paths.
- Confirm the system is running an affected kernel build on ARM OMAP-related hardware with the OMAP GPIO/MPUIO driver present or loadable.
- Trigger GPIO/MPUIO driver probe, reprobe, bind/unbind, or module load/unload behavior.
- Cause the driver core to register or match drivers while a device lock is already held.
- Induce a kernel deadlock, hung task, device malfunction, or system-wide availability impact.
- Force administrators to recover the system through service restart, kernel recovery, reboot, or physical power cycle.
How to detect it
Retrospective detection should focus on availability symptoms rather than classic compromise artifacts. Review kernel logs, persistent journal entries, serial console logs, watchdog logs, crash dumps, and device management telemetry for hangs or resets around GPIO/MPUIO driver activity. Look for kernel lockup, hung task, lockdep, driver probe, module load/unload, or watchdog-reset messages involving OMAP GPIO or MPUIO. Correlate these events with local user logins, sudo activity, module-management commands, sysfs driver bind/unbind writes, container/device passthrough activity, or maintenance scripts. Because this vulnerability is a local DoS and no public exploit maturity or KEV exploitation is indicated, absence of malware artifacts is expected; repeated unexplained OMAP GPIO-related hangs after local access events are the strongest signal.
- omap_gpio_probe
- omap_mpuio_driver
- omap_mpuio_init
- omap_gpio
- gpio-omap
- mpuio
- driver_match_device
- device_lock
- possible circular locking dependency detected
- BUG: sleeping function called from invalid context
- INFO: task hung
- blocked for more than 120 seconds
- watchdog: BUG: soft lockup
- watchdog: hard LOCKUP
- rcu: INFO: rcu_preempt detected stalls
- echo * > /sys/bus/platform/drivers/*/unbind
- echo * > /sys/bus/platform/drivers/*/bind
- modprobe gpio-omap
- rmmod gpio-omap
- insmod gpio-omap
What your security team should do
- Identify Linux assets using ARM OMAP hardware, embedded board support packages, or kernels with OMAP GPIO/MPUIO support enabled.
- Prioritize patching for remotely managed, safety-sensitive, industrial, telecom, appliance, or difficult-to-reboot devices where local denial of service has high operational impact.
- Obtain fixed kernels from the operating system, device, or BSP vendor; if maintaining custom kernels, backport the upstream driver registration/unregistration fix.
- Restrict local interactive access and administrative capabilities on affected devices until patched, especially module loading, device binding/unbinding, and direct access to GPIO-related device nodes.
- Monitor kernel logs for hung tasks, lock dependency warnings, OMAP GPIO/MPUIO probe failures, and unexplained reboots or watchdog resets.
- For containerized or multi-user systems, ensure untrusted workloads cannot access host GPIO devices, sysfs driver bind/unbind controls, or kernel module management interfaces.
- Include this issue in embedded Linux release qualification and regression tests covering driver probe, module unload, suspend/resume, and watchdog recovery behavior.
The record
In the Linux kernel, the following vulnerability has been resolved: gpio: omap: do not register driver in probe() Commit 11a78b794496 ("ARM: OMAP: MPUIO wake updates") registers the omap_mpuio_driver from omap_mpuio_init(), which is called from omap_gpio_probe(). However, it neither makes sense to register drivers from probe() callbacks of other drivers, nor does the driver core allow registering drivers with a device lock already being held. The latter was revealed by commit dc23806a7c47 ("driver core: enforce device_lock for driver_match_device()") leading to a potential deadlock condition described in [1]. Additionally, the omap_mpuio_driver is never unregistered from the driver core, even if the module is unloaded. Hence, register the omap_mpuio_driver from the module initcall and unregister it in module_exit().
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-61854 VoiceSentinel is a real-time voice moderation system for Minecraft servers. CWE-667
- CVE-2026-118593 A flaw was found in Red Hat Enterprise Linux 9 kernel builds. CWE-667
- CVE-2026-106174 A improper locking vulnerability in Fortinet FortiOS 8.0.0, FortiOS 7.6.4 through 7.6.6… CWE-667
- CVE-2026-110803 VaadinService.requestEnd() in Vaadin Framework 8 locks the session and then reads the… CWE-667
- CVE-2026-111879 DBI versions before 1.656 for Perl hang on a later open of a DBD::DBM table because a… CWE-667
- CVE-2026-107674 IBM i 7.3, 7.4, 7.5, and 7.6 is vulnerable to a denial of service to Digital Certificate… CWE-667
- CVE-2026-98123 In the Linux kernel, the following vulnerability has been resolved: sctp: fix soft lockup… CWE-667
- CVE-2026-98094 In the Linux kernel, the following vulnerability has been resolved: staging: fbtft: make… CWE-667