CVE-2026-80660
NoneCVSS
—
EPSS
0.2%
Published
Aug 28, 2026
CISA due date
—
Cloudanix analysis
A locking mistake in Linux hardware monitoring code can cause the system to freeze when certain monitoring features are turned off while still in use.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- High
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Race Condition
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Circular locking dependency between occ->lock and sysfs callback drain during hwmon_device_unregister and occ_shutdown, allowing deadlock when callbacks re-enter the OCC update path.
Why it matters to the business
Linux systems relying on the OCC hwmon driver risk kernel deadlocks that can freeze hardware monitoring and cause system hangs or crashes, interrupting operations on affected servers and embedded devices.
How an attack unfolds
An attacker with local privileges triggers concurrent occ_active(false) or occ_shutdown paths while sysfs callbacks are active, forcing the reverse lock acquisition order that lockdep warns about and resulting in deadlock.
How to fix it
Apply a kernel patch that introduces a separate hwmon_lock for registration and removal, detaches the hwmon device under occ->lock then drops it before unregister, removes driver sysfs groups before taking occ->lock, and returns -ENODEV from callbacks after deactivation.
How to confirm the fix worked
Rebuild with lockdep enabled, exercise occ_shutdown and occ_active paths under concurrent sysfs load, and confirm absence of circular locking warnings; verify occ->hwmon is detached before hwmon_device_unregister is called.
Typical attack path
- Obtain local access on a system using the OCC hwmon driver
- Trigger hwmon device unregistration or shutdown concurrently with active sysfs read callbacks
- Force occ_show_temp or similar callbacks to contend for occ->lock after the unregister path has acquired it
- Induce kernel deadlock via the circular dependency
How to detect it
Search kernel logs for lockdep warnings referencing occ.lock, hwmon_device_unregister, occ_shutdown, and occ_update_response; inspect for processes stuck in D state during hwmon attribute access.
- WARNING: possible circular locking dependency detected
- occ_shutdown.constprop
- hwmon_device_unregister
- &test_occ.lock
- occ_update_response.isra
- occ_show_temp_1.constprop
What your security team should do
- Prioritize kernel updates for systems exposing the OCC hwmon driver
- Enable lockdep in test and production kernels to surface ordering violations
- Restrict unprivileged local access on unpatched systems until updates are deployed
- Monitor kernel logs for occ-related lockdep warnings as an early indicator
The record
In the Linux kernel, the following vulnerability has been resolved: hwmon: (occ) unregister sysfs devices outside occ lock occ_active(false) and occ_shutdown() unregister sysfs-backed devices while occ->lock is held. hwmon_device_unregister() and sysfs_remove_group() can wait for active sysfs callbacks to drain, and those callbacks can enter the OCC update path and try to take occ->lock again. That gives the unregister paths the lock ordering occ->lock -> sysfs callback drain, while a callback has the opposite edge sysfs callback -> occ->lock. This issue was found by our static analysis tool and then manually reviewed against the current tree. The grounded PoC kept the real unregister and callback carrier: occ_shutdown() hwmon_device_unregister() occ_show_temp_1() occ_update_response() Lockdep reported the circular dependency with occ_shutdown() already holding the OCC mutex and hwmon_device_unregister() waiting on the sysfs side: WARNING: possible circular locking dependency detected ... (sysfs_lock) ... at: hwmon_device_unregister+0x12/0x30 [vuln_msv] ... (&test_occ.lock) ... at: occ_shutdown.constprop.0+0xe/0x40 [vuln_msv] occ_update_response.isra.0+0xb/0x20 [vuln_msv] occ_show_temp_1.constprop.0.isra.0+0x23/0x40 [vuln_msv] *** DEADLOCK *** Serialize hwmon registration and removal with a separate hwmon_lock. Under that lock, detach occ->hwmon and update occ->active while occ->lock is held so concurrent OCC state changes still see a stable state, then drop occ->lock before calling hwmon_device_unregister(). Remove the driver sysfs group before taking occ->lock in occ_shutdown(), so draining the driver attributes cannot wait while the OCC mutex is held. Also make OCC update callbacks return -ENODEV after deactivation, so callbacks that already passed sysfs active protection do not poll the hardware after teardown has detached the hwmon device.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|