CVE-2026-31486 (GCVE-0-2026-31486)

Vulnerability from cvelistv5 – Published: 2026-04-22 13:54 – Updated: 2026-08-05 12:23
VLAI
Title
hwmon: (pmbus/core) Protect regulator operations with mutex
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.
Assigner
Impacted products
Vendor Product Version
Linux Linux Affected: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7 , < b26849cffaa7c43355b82e9bef3725e786973a1a (git)
Affected: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7 , < acf04e2863132f6d9222f71f3a76fb9782cbe061 (git)
Affected: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7 , < 4e9d723d9f198b86f6882a84c501ba1f39e8d055 (git)
Affected: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7 , < 2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07 (git)
Affected: ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7 , < 754bd2b4a084b90b5e7b630e1f423061a9b9b761 (git)
Create a notification for this product.
Linux Linux Affected: 3.19
Unaffected: 0 , < 3.19 (semver)
Unaffected: 6.6.143 , ≤ 6.6.* (semver)
Unaffected: 6.12.92 , ≤ 6.12.* (semver)
Unaffected: 6.18.21 , ≤ 6.18.* (semver)
Unaffected: 6.19.11 , ≤ 6.19.* (semver)
Unaffected: 7.0 , ≤ * (original_commit_for_fix)
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",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-31486",
      "date": "2026-08-14",
      "epss": "0.00099",
      "percentile": "0.0093"
    },
    "microsoft_vex": {
      "current_release_date": "2026-07-02T14:42:51.000Z",
      "cve": "CVE-2026-31486",
      "id": "msrc_CVE-2026-31486",
      "initial_release_date": "2026-04-02T00:00:00.000Z",
      "product_status:fixed": "1",
      "product_status:known_affected": "8",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "hwmon: (pmbus/core) Protect regulator operations with mutex",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-31486.json",
      "version": "10"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-31486\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-04-22T14:16:46.160\",\"lastModified\":\"2026-06-19T13:16:26.330\",\"vulnStatus\":\"Modified\",\"cveTags\":[],\"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.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"drivers/hwmon/pmbus/pmbus_core.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7\",\"lessThan\":\"b26849cffaa7c43355b82e9bef3725e786973a1a\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7\",\"lessThan\":\"acf04e2863132f6d9222f71f3a76fb9782cbe061\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7\",\"lessThan\":\"4e9d723d9f198b86f6882a84c501ba1f39e8d055\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7\",\"lessThan\":\"2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7\",\"lessThan\":\"754bd2b4a084b90b5e7b630e1f423061a9b9b761\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"drivers/hwmon/pmbus/pmbus_core.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"3.19\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"3.19\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.6.143\",\"lessThanOrEqual\":\"6.6.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.92\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.18.21\",\"lessThanOrEqual\":\"6.18.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.19.11\",\"lessThanOrEqual\":\"6.19.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.0\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H\",\"baseScore\":7.1,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"NONE\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.2}]},\"weaknesses\":[{\"source\":\"nvd@nist.gov\",\"type\":\"Primary\",\"description\":[{\"lang\":\"en\",\"value\":\"CWE-667\"}]}],\"configurations\":[{\"nodes\":[{\"operator\":\"OR\",\"negate\":false,\"cpeMatch\":[{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"3.19.1\",\"versionEndExcluding\":\"6.18.21\",\"matchCriteriaId\":\"689AD2FA-326D-4E6F-8192-689D60EEA86F\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\",\"versionStartIncluding\":\"6.19\",\"versionEndExcluding\":\"6.19.11\",\"matchCriteriaId\":\"4CA2E747-A9EC-4518-9AA2-B4247FC748B7\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:3.19:-:*:*:*:*:*:*\",\"matchCriteriaId\":\"8C54596F-5461-44C4-91FB-7453BE905748\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*\",\"matchCriteriaId\":\"F253B622-8837-4245-BCE5-A7BF8FC76A16\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*\",\"matchCriteriaId\":\"4AE85AD8-4641-4E7C-A2F4-305E2CD9EE64\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*\",\"matchCriteriaId\":\"F666C8D8-6538-46D4-B318-87610DE64C34\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*\",\"matchCriteriaId\":\"02259FDA-961B-47BC-AE7F-93D7EC6E90C2\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*\",\"matchCriteriaId\":\"58A9FEFF-C040-420D-8F0A-BFDAAA1DF258\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*\",\"matchCriteriaId\":\"1D2315C0-D46F-4F85-9754-F9E5E11374A6\"},{\"vulnerable\":true,\"criteria\":\"cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:*\",\"matchCriteriaId\":\"512EE3A8-A590-4501-9A94-5D4B268D6138\"}]}]}],\"references\":[{\"url\":\"https://git.kernel.org/stable/c/2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/4e9d723d9f198b86f6882a84c501ba1f39e8d055\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/754bd2b4a084b90b5e7b630e1f423061a9b9b761\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"tags\":[\"Patch\"]},{\"url\":\"https://git.kernel.org/stable/c/acf04e2863132f6d9222f71f3a76fb9782cbe061\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/b26849cffaa7c43355b82e9bef3725e786973a1a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Low",
      "current_release_date": "2026-07-02T17:19:41+00:00",
      "cve": "CVE-2026-31486",
      "id": "CVE-2026-31486",
      "initial_release_date": "2026-04-22T00:00:00+00:00",
      "product_status:known_affected": "232",
      "product_status:known_not_affected": "42",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: hwmon: (pmbus/core) Protect regulator operations with mutex",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-31486.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-08-06T01:24:51Z",
      "cve": "CVE-2026-31486",
      "id": "CVE-2026-31486",
      "initial_release_date": "2026-04-23T01:25:36Z",
      "product_status:known_affected": "313",
      "product_status:known_not_affected": "4",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-31486",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-31486.json",
      "version": "7"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…