CVE-2026-31486 (GCVE-0-2026-31486)
Vulnerability from cvelistv5
Published
2026-04-22 13:54
Modified
2026-08-05 12:23
Summary
In the Linux kernel, the following vulnerability has been resolved: hwmon: (pmbus/core) Protect regulator operations with mutex The regulator operations pmbus_regulator_get_voltage(), pmbus_regulator_set_voltage(), and pmbus_regulator_list_voltage() access PMBus registers and shared data but were not protected by the update_lock mutex. This could lead to race conditions. However, adding mutex protection directly to these functions causes a deadlock because pmbus_regulator_notify() (which calls regulator_notifier_call_chain()) is often called with the mutex already held (e.g., from pmbus_fault_handler()). If a regulator callback then calls one of the now-protected voltage functions, it will attempt to acquire the same mutex. Rework pmbus_regulator_notify() to utilize a worker function to send notifications outside of the mutex protection. Events are stored as atomics in a per-page bitmask and processed by the worker. Initialize the worker and its associated data during regulator registration, and ensure it is cancelled on device removal using devm_add_action_or_reset(). While at it, remove the unnecessary include of linux/of.h.
Impacted products
Vendor Product Version
Linux Linux Version: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7
Version: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7
Version: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7
Version: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7
Version: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/hwmon/pmbus/pmbus_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "b26849cffaa7c43355b82e9bef3725e786973a1a",
              "status": "affected",
              "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7",
              "versionType": "git"
            },
            {
              "lessThan": "acf04e2863132f6d9222f71f3a76fb9782cbe061",
              "status": "affected",
              "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7",
              "versionType": "git"
            },
            {
              "lessThan": "4e9d723d9f198b86f6882a84c501ba1f39e8d055",
              "status": "affected",
              "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7",
              "versionType": "git"
            },
            {
              "lessThan": "2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07",
              "status": "affected",
              "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7",
              "versionType": "git"
            },
            {
              "lessThan": "754bd2b4a084b90b5e7b630e1f423061a9b9b761",
              "status": "affected",
              "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/hwmon/pmbus/pmbus_core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.19"
            },
            {
              "lessThan": "3.19",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.143",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.92",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.21",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.19.*",
              "status": "unaffected",
              "version": "6.19.11",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.0",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.143",
                  "versionStartIncluding": "3.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.92",
                  "versionStartIncluding": "3.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.21",
                  "versionStartIncluding": "3.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.19.11",
                  "versionStartIncluding": "3.19",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0",
                  "versionStartIncluding": "3.19",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nhwmon: (pmbus/core) Protect regulator operations with mutex\n\nThe regulator operations pmbus_regulator_get_voltage(),\npmbus_regulator_set_voltage(), and pmbus_regulator_list_voltage()\naccess PMBus registers and shared data but were not protected by\nthe update_lock mutex. This could lead to race conditions.\n\nHowever, adding mutex protection directly to these functions causes\na deadlock because pmbus_regulator_notify() (which calls\nregulator_notifier_call_chain()) is often called with the mutex\nalready held (e.g., from pmbus_fault_handler()). If a regulator\ncallback then calls one of the now-protected voltage functions,\nit will attempt to acquire the same mutex.\n\nRework pmbus_regulator_notify() to utilize a worker function to\nsend notifications outside of the mutex protection. Events are\nstored as atomics in a per-page bitmask and processed by the worker.\n\nInitialize the worker and its associated data during regulator\nregistration, and ensure it is cancelled on device removal using\ndevm_add_action_or_reset().\n\nWhile at it, remove the unnecessary include of linux/of.h."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.1,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable PMBus regulator operations are reached through local kernel interfaces such as regulator and hwmon sysfs paths, not through network input or physical hotplug.\nAC:L - A local attacker can create concurrent sysfs polling/workload activity against regulator and PMBus hwmon paths to exercise the race; the race is repeatable and does not require conditions outside attacker influence.\nPR:L - World-readable regulator and hwmon sysfs attributes allow an unprivileged local user to enter the affected PMBus register access paths. More destructive voltage-setting paths may involve kernel consumers, but basic local user privileges are sufficient to participate in and trigger the shared page/register race.\nUI:N - No victim action is required once the attacker has local execution; the attacker can run concurrent accesses directly.\nS:U - The impact remains within the kernel-managed PMBus/regulator and attached hardware power-control authority. This is not a VM escape, sandbox escape, or cross-authority boundary bypass.\nC:N - The bug is a synchronization failure around PMBus register/page state, not kernel memory disclosure. Wrong-page sensor reads expose hardware telemetry rather than meaningful confidential data.\nI:H - Interleaving can cause PMBus operations intended for one rail/page to be applied to another, including voltage-control register operations, which can corrupt critical power-control state. In severe deployments this can undermine system integrity by misconfiguring regulator outputs.\nA:H - PMBus regulators can control critical CPU, board, or device power rails, and misdirected voltage or operation register access can reset, hang, brown out, or otherwise disable the system. Repeated local triggering can sustain the denial of service."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:23:00.413Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/b26849cffaa7c43355b82e9bef3725e786973a1a"
        },
        {
          "url": "https://git.kernel.org/stable/c/acf04e2863132f6d9222f71f3a76fb9782cbe061"
        },
        {
          "url": "https://git.kernel.org/stable/c/4e9d723d9f198b86f6882a84c501ba1f39e8d055"
        },
        {
          "url": "https://git.kernel.org/stable/c/2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07"
        },
        {
          "url": "https://git.kernel.org/stable/c/754bd2b4a084b90b5e7b630e1f423061a9b9b761"
        }
      ],
      "title": "hwmon: (pmbus/core) Protect regulator operations with mutex",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-31486",
    "datePublished": "2026-04-22T13:54:11.594Z",
    "dateReserved": "2026-03-09T15:48:24.101Z",
    "dateUpdated": "2026-08-05T12:23:00.413Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…