{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-31486", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2026-03-09T15:48:24.101Z", "datePublished": "2026-04-22T13:54:11.594Z", "dateUpdated": "2026-08-05T12:23:00.413Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T12:23:00.413Z" }, "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": { "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" }, "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." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/hwmon/pmbus/pmbus_core.c" ], "versions": [ { "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7", "lessThan": "b26849cffaa7c43355b82e9bef3725e786973a1a", "status": "affected", "versionType": "git" }, { "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7", "lessThan": "acf04e2863132f6d9222f71f3a76fb9782cbe061", "status": "affected", "versionType": "git" }, { "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7", "lessThan": "4e9d723d9f198b86f6882a84c501ba1f39e8d055", "status": "affected", "versionType": "git" }, { "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7", "lessThan": "2c77ae315f3ce9d2c8e1609be74c9358c1fe4e07", "status": "affected", "versionType": "git" }, { "version": "ddbb4db4ced1ba784fcd3500179a7291b6c5d7b7", "lessThan": "754bd2b4a084b90b5e7b630e1f423061a9b9b761", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/hwmon/pmbus/pmbus_core.c" ], "versions": [ { "version": "3.19", "status": "affected" }, { "version": "0", "lessThan": "3.19", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.143", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.92", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.18.21", "lessThanOrEqual": "6.18.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.19.11", "lessThanOrEqual": "6.19.*", "status": "unaffected", "versionType": "semver" }, { "version": "7.0", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.19", "versionEndExcluding": "6.6.143" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.19", "versionEndExcluding": "6.12.92" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.19", "versionEndExcluding": "6.18.21" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.19", "versionEndExcluding": "6.19.11" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.19", "versionEndExcluding": "7.0" } ] } ] } ], "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" } } } }