Description
In the Linux kernel, the following vulnerability has been resolved:

regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK

Compare against -EDEADLK, which is what ww_mutex_lock() actually
returns and what every other deadlock check in this file already uses.

Function regulator_lock_two() acquires two regulators via
regulator_lock_nested() -> ww_mutex_lock(). On contention,
ww_mutex_lock() returns -EDEADLK, which is the caller's signal to drop
the lock it holds and retry the acquisition in the canonical order.

However, regulator_lock_two() tests the return value against -EDEADLOCK
rather than -EDEADLK. On most architectures, EDEADLK and EDEADLOCK are
the same value, so the comparison happens to be correct and the bug is
invisible. But on MIPS, SPARC, and PowerPC, those two errors have
different values. The test is wrong: a genuine -EDEADLK backoff no
longer matches -EDEADLOCK, so instead of unlocking and retrying, the
code falls into WARN_ON(ret) and returns with only one of the two
regulators locked.

In practice, this is a bug only on MIPS, because the regulator core is
not built or used on the other two platforms.

In general, EDEADLK is preferred over EDEADLOCK for new code.
Published: 2026-08-15
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

In the Linux kernel, the function that locks two regulators uses a deadlock‑aware mutex lock. When contention occurs, the mutex function returns -EDEADLK to signal that the caller should release any lock it already holds and retry in the correct order. The regulator code, however, mistakenly checks for the value -EDEADLOCK. On processors where EDEADLK and EDEADLOCK are distinct, such as MIPS, the comparison fails. The code therefore skips the expected back‑off logic, triggers a warning, and returns with only one of the two regulators locked. This improper error handling can leave a regulator in an inconsistent state, potentially leading to power‑management failures or device malfunction. The weakness is a result of an incorrect comparison of error return codes, categorised as CWE‑1025. The missing logic does not directly provide a path for arbitrary code execution, but it can compromise the reliability of power‑management subsystems that depend on multi‑regulator coordination. The CVSS score of 7.8 indicates high severity, yet the EPSS score is below 1 %. The vulnerability is not listed in the CISA KEV catalogue. Exploitation would require the ability to trigger concurrent regulator acquisition on a MIPS system – a capability normally limited to local, privileged code. These inferred attack requirements are not directly stated in the advisory. The overall threat is therefore moderate, with low likelihood of exploitation in most environments but potentially significant availability impact on vulnerable MIPS platforms when the regulator core is enabled.

Affected Systems

The defect resides in the Linux kernel code for regulator_lock_two, which is invoked when the regulator core subsystem is compiled into the kernel. The bug manifests on MIPS architectures because the error codes differ; on SPARC and PowerPC the kernel usually does not use the regulator core, so they are effectively not impacted. Therefore the affected platforms are Linux kernel (regulator core enabled) running on MIPS, with no specific version information provided.

Risk and Exploitability

The CVSS score of 7.8 reflects significant potential impact on system availability. The EPSS score of < 1 % indicates that current exploit activity is believed to be very low. The vulnerability is not listed in the CISA KEV catalogue, so there is no known widespread or targeted exploitation campaign associated with it. The likely attack vector is local privilege escalation on a MIPS system where a malicious user or process can trigger the regulator_lock_two function. Since the regulator core is not typically built on SPARC or PowerPC, those architectures are effectively immune. In the absence of a direct code‑execution path, the risk is primarily the failure of power‑management operations, potentially causing device malfunction or service interruption.

Generated by OpenCVE AI on August 22, 2026 at 11:14 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the kernel patch that corrects the regulator_lock_two comparison to -EDEADLK
  • If a patch cannot be applied, disable the regulator core in kernel configuration to avoid the code path
  • Monitor kernel logs for WARN_ON messages related to regulator locking failures and investigate promptly

Generated by OpenCVE AI on August 22, 2026 at 11:14 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 22 Aug 2026 08:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-558

Wed, 19 Aug 2026 00:15:00 +0000


Mon, 17 Aug 2026 06:00:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Sat, 15 Aug 2026 10:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-558

Sat, 15 Aug 2026 06:00:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK Compare against -EDEADLK, which is what ww_mutex_lock() actually returns and what every other deadlock check in this file already uses. Function regulator_lock_two() acquires two regulators via regulator_lock_nested() -> ww_mutex_lock(). On contention, ww_mutex_lock() returns -EDEADLK, which is the caller's signal to drop the lock it holds and retry the acquisition in the canonical order. However, regulator_lock_two() tests the return value against -EDEADLOCK rather than -EDEADLK. On most architectures, EDEADLK and EDEADLOCK are the same value, so the comparison happens to be correct and the bug is invisible. But on MIPS, SPARC, and PowerPC, those two errors have different values. The test is wrong: a genuine -EDEADLK backoff no longer matches -EDEADLOCK, so instead of unlocking and retrying, the code falls into WARN_ON(ret) and returns with only one of the two regulators locked. In practice, this is a bug only on MIPS, because the regulator core is not built or used on the other two platforms. In general, EDEADLK is preferred over EDEADLOCK for new code.
Title regulator: core: regulator_lock_two() should test for EDEADLK not EDEADLOCK
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-17T05:42:40.833Z

Reserved: 2026-08-09T03:40:39.918Z

Link: CVE-2026-72314

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-15T06:22:04.223

Modified: 2026-08-17T06:18:34.510

Link: CVE-2026-72314

cve-icon Redhat

Severity : Low

Publid Date: 2026-08-15T00:00:00Z

Links: CVE-2026-72314 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-22T11:15:04Z

Weaknesses
  • CWE-1025

    Comparison Using Wrong Factors