CVE-2026-74405 (GCVE-0-2026-74405)

Vulnerability from cvelistv5 – Published: 2026-08-15 05:59 – Updated: 2026-08-17 05:46
VLAI
Title
OPP: Fix race between OPP addition and lookup
Summary
In the Linux kernel, the following vulnerability has been resolved: OPP: Fix race between OPP addition and lookup A race exists between dev_pm_opp_add_dynamic() and dev_pm_opp_find_freq_exact(): CPU0 (add) CPU1 (lookup) ------------------------------- ------------------------------ _opp_add() mutex_lock() list_add(&new_opp->node, head) mutex_unlock() _opp_table_find_key() mutex_lock() dev_pm_opp_get(opp) kref_get() mutex_unlock() kref_init(&new_opp->kref) dev_pm_opp_put() kref_put_mutex() The newly added OPP is inserted into the list before its kref is initialized. A concurrent lookup can find this OPP and increment its reference count while it is still uninitialized, leading to refcount corruption and a potential premature free. Fix this by initializing ->kref and ->opp_table before making the OPP visible via list_add(). This ensures any concurrent lookup observes a fully initialized object. [ Viresh: Updated commit log ]
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 7034764a1e4a6edbb60914e89aad8384e3fe5d17 , < 46696b0b2123475d7f95909435c09808fc5ffd23 (git)
Affected: 7034764a1e4a6edbb60914e89aad8384e3fe5d17 , < bb75bd7d9ae7672034f73ce67a57e6ac89bb39e5 (git)
Affected: 7034764a1e4a6edbb60914e89aad8384e3fe5d17 , < f5e1cc9a284bff2510981643a5bca4bc4c21b81a (git)
guessed Create a notification for this product.
Linux Linux Affected: 4.11
Unaffected: 0 , < 4.11 (semver)
Unaffected: 6.18.40 , ≤ 6.18.* (semver)
Unaffected: 7.1.5 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/opp/core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "46696b0b2123475d7f95909435c09808fc5ffd23",
              "status": "affected",
              "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
              "versionType": "git"
            },
            {
              "lessThan": "bb75bd7d9ae7672034f73ce67a57e6ac89bb39e5",
              "status": "affected",
              "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
              "versionType": "git"
            },
            {
              "lessThan": "f5e1cc9a284bff2510981643a5bca4bc4c21b81a",
              "status": "affected",
              "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/opp/core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.11"
            },
            {
              "lessThan": "4.11",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.40",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.40",
                  "versionStartIncluding": "4.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.5",
                  "versionStartIncluding": "4.11",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "4.11",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nOPP: Fix race between OPP addition and lookup\n\nA race exists between dev_pm_opp_add_dynamic() and\ndev_pm_opp_find_freq_exact():\n\n  CPU0 (add)                          CPU1 (lookup)\n  -------------------------------     ------------------------------\n  _opp_add()\n    mutex_lock()\n    list_add(\u0026new_opp-\u003enode, head)\n    mutex_unlock()                    _opp_table_find_key()\n                                        mutex_lock()\n                                        dev_pm_opp_get(opp)\n                                          kref_get()\n                                        mutex_unlock()\n    kref_init(\u0026new_opp-\u003ekref)\n                                      dev_pm_opp_put()\n                                        kref_put_mutex()\n\nThe newly added OPP is inserted into the list before its kref is\ninitialized. A concurrent lookup can find this OPP and increment its\nreference count while it is still uninitialized, leading to refcount\ncorruption and a potential premature free.\n\nFix this by initializing -\u003ekref and -\u003eopp_table before making the OPP\nvisible via list_add(). This ensures any concurrent lookup observes a\nfully initialized object.\n\n[ Viresh: Updated commit log ]"
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The bug is in the kernel OPP DVFS core reached only from local cpufreq, devfreq, thermal, and GPU power-management paths (e.g. scmi-cpufreq, mtk-mfg, MSM Adreno) that call dev_pm_opp_add_dynamic() and dev_pm_opp_find_freq_exact(); there is no network, adjacent-radio, or physical-device input into _opp_add().\nAC:L - The attacker can drive the lookup side with parallel CPU/GPU load or cpufreq scaling while the kernel concurrently inserts OPPs via _opp_add() during multi-CPU SCMI/GPU power-domain attach and boot cpufreq init; both race participants are attacker-influenceable timing on multi-core ARM/Android/embedded systems.\nPR:L - No init-namespace root is required to hammer dev_pm_opp_find_freq_exact() through normal cpufreq, thermal, or GPU DVFS activity from an unprivileged local process; OPP registration runs automatically in kernel driver attach/probe paths without attacker credentials.\nUI:N - Exploitation does not require any victim action beyond the attacker (or kernel) driving DVFS activity; no mount, file open, or other interactive step is needed once the attacker runs concurrent workload or scaling pressure on the target system.\nS:U - Refcount corruption causes premature kfree() of a dev_pm_opp slab object still linked in the OPP table, enabling standard kernel memory corruption and privilege escalation within the same OS boundary rather than a VM, IOMMU, or sandbox escape.\nC:H - Uninitialized kref_get()/kref_init() races corrupt the OPP refcount and can free the structure while still listed; this use-after-free of kmalloc\u0027d dev_pm_opp memory can expose adjacent heap contents and support arbitrary kernel read primitives.\nI:H - Premature free of dev_pm_opp while its list node remains reachable allows heap reuse and controlled writes through subsequent allocations, providing a standard path to corrupt kernel objects and achieve arbitrary code execution.\nA:H - Refcount corruption can trigger _opp_kref_release() to kfree() an OPP still referenced by concurrent lookups, causing kernel oops/panic from use-after-free or list corruption during ongoing DVFS operations."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-17T05:46:47.595Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/46696b0b2123475d7f95909435c09808fc5ffd23"
        },
        {
          "url": "https://git.kernel.org/stable/c/bb75bd7d9ae7672034f73ce67a57e6ac89bb39e5"
        },
        {
          "url": "https://git.kernel.org/stable/c/f5e1cc9a284bff2510981643a5bca4bc4c21b81a"
        }
      ],
      "title": "OPP: Fix race between OPP addition and lookup",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74405",
    "datePublished": "2026-08-15T05:59:14.719Z",
    "dateReserved": "2026-08-15T05:44:03.892Z",
    "dateUpdated": "2026-08-17T05:46:47.595Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-74405",
      "date": "2026-09-21",
      "epss": "0.00128",
      "percentile": "0.02774"
    },
    "microsoft_vex": {
      "current_release_date": "2026-08-23T15:00:51.000Z",
      "cve": "CVE-2026-74405",
      "id": "msrc_CVE-2026-74405",
      "initial_release_date": "2026-08-23T15:00:51.000Z",
      "product_status:known_affected": "1",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "OPP: Fix race between OPP addition and lookup",
      "url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-74405.json",
      "version": "1"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "drivers/opp/core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "46696b0b2123475d7f95909435c09808fc5ffd23",
                    "status": "affected",
                    "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "bb75bd7d9ae7672034f73ce67a57e6ac89bb39e5",
                    "status": "affected",
                    "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "f5e1cc9a284bff2510981643a5bca4bc4c21b81a",
                    "status": "affected",
                    "version": "7034764a1e4a6edbb60914e89aad8384e3fe5d17",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "drivers/opp/core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "4.11"
                  },
                  {
                    "lessThan": "4.11",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.18.*",
                    "status": "unaffected",
                    "version": "6.18.40",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "7.1.*",
                    "status": "unaffected",
                    "version": "7.1.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.2",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nOPP: Fix race between OPP addition and lookup\n\nA race exists between dev_pm_opp_add_dynamic() and\ndev_pm_opp_find_freq_exact():\n\n  CPU0 (add)                          CPU1 (lookup)\n  -------------------------------     ------------------------------\n  _opp_add()\n    mutex_lock()\n    list_add(\u0026new_opp-\u003enode, head)\n    mutex_unlock()                    _opp_table_find_key()\n                                        mutex_lock()\n                                        dev_pm_opp_get(opp)\n                                          kref_get()\n                                        mutex_unlock()\n    kref_init(\u0026new_opp-\u003ekref)\n                                      dev_pm_opp_put()\n                                        kref_put_mutex()\n\nThe newly added OPP is inserted into the list before its kref is\ninitialized. A concurrent lookup can find this OPP and increment its\nreference count while it is still uninitialized, leading to refcount\ncorruption and a potential premature free.\n\nFix this by initializing -\u003ekref and -\u003eopp_table before making the OPP\nvisible via list_add(). This ensures any concurrent lookup observes a\nfully initialized object.\n\n[ Viresh: Updated commit log ]"
          }
        ],
        "id": "CVE-2026-74405",
        "lastModified": "2026-08-17T06:19:35.740",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 7.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "UNCHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 1.8,
              "impactScore": 5.9,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-08-15T06:22:42.530",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/46696b0b2123475d7f95909435c09808fc5ffd23"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/bb75bd7d9ae7672034f73ce67a57e6ac89bb39e5"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/f5e1cc9a284bff2510981643a5bca4bc4c21b81a"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Moderate",
      "current_release_date": "2026-08-19T19:45:54+00:00",
      "cve": "CVE-2026-74405",
      "id": "CVE-2026-74405",
      "initial_release_date": "2026-08-15T00:00:00+00:00",
      "product_status:known_affected": "182",
      "product_status:known_not_affected": "92",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: OPP: Fix race between OPP addition and lookup",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-74405.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-15T01:21:29Z",
      "cve": "CVE-2026-74405",
      "id": "CVE-2026-74405",
      "initial_release_date": "2026-08-25T01:21:21Z",
      "product_status:known_affected": "356",
      "product_status:known_not_affected": "6",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-74405",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-74405.json",
      "version": "4"
    }
  }
}



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…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…