CVE-2025-38395 (GCVE-0-2025-38395)
Vulnerability from cvelistv5
Published
2025-07-25 12:53
Modified
2026-08-05 12:01
Summary
In the Linux kernel, the following vulnerability has been resolved: regulator: gpio: Fix the out-of-bounds access to drvdata::gpiods drvdata::gpiods is supposed to hold an array of 'gpio_desc' pointers. But the memory is allocated for only one pointer. This will lead to out-of-bounds access later in the code if 'config::ngpios' is > 1. So fix the code to allocate enough memory to hold 'config::ngpios' of GPIO descriptors. While at it, also move the check for memory allocation failure to be below the allocation to make it more readable.
Impacted products
Vendor Product Version
Linux Linux Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Version: d6cd33ad71029a3f77ba1686caf55d4dea58d916
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "providerMetadata": {
          "dateUpdated": "2025-11-03T17:37:28.806Z",
          "orgId": "af854a3a-2127-422b-91ae-364da2661108",
          "shortName": "CVE"
        },
        "references": [
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/10/msg00008.html"
          },
          {
            "url": "https://lists.debian.org/debian-lts-announce/2025/10/msg00007.html"
          }
        ],
        "title": "CVE Program Container"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/regulator/gpio-regulator.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "a3cd5ae7befbac849e0e0529c94ca04e8093cfd2",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "9fe71972869faed1f8f9b3beb9040f9c1b300c79",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "56738cbac3bbb1d39a71a07f57484dec1db8b239",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "a1e12fac214d4f49fcb186dbdf9c5592e7fa0a7a",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "24418bc77a66cb5be9f5a837431ba3674ed8b52f",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "e4d19e5d71b217940e33f2ef6c6962b7b68c5606",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "3830ab97cda9599872625cc0dc7b00160193634f",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            },
            {
              "lessThan": "c9764fd88bc744592b0604ccb6b6fc1a5f76b4e3",
              "status": "affected",
              "version": "d6cd33ad71029a3f77ba1686caf55d4dea58d916",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "drivers/regulator/gpio-regulator.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.1"
            },
            {
              "lessThan": "5.1",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.4.*",
              "status": "unaffected",
              "version": "5.4.296",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.240",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.187",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.144",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.97",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.37",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.15.*",
              "status": "unaffected",
              "version": "6.15.6",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.16",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.4.296",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.240",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.187",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.144",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.97",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.37",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.15.6",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16",
                  "versionStartIncluding": "5.1",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nregulator: gpio: Fix the out-of-bounds access to drvdata::gpiods\n\ndrvdata::gpiods is supposed to hold an array of \u0027gpio_desc\u0027 pointers. But\nthe memory is allocated for only one pointer. This will lead to\nout-of-bounds access later in the code if \u0027config::ngpios\u0027 is \u003e 1. So\nfix the code to allocate enough memory to hold \u0027config::ngpios\u0027 of GPIO\ndescriptors.\n\nWhile at it, also move the check for memory allocation failure to be below\nthe allocation to make it more readable."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.4,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The flaw is in a platform driver bound from device-tree/ACPI data on the local system; the out-of-bounds write occurs in local kernel context during probe with no network or physical interaction required for the corruption itself. Matches the AV:L convention used for analogous probe-time allocation-size bugs such as CVE-2025-39869 and CVE-2025-38446.\nAC:L - On any affected board the overflow is fully deterministic \u2014 it fires on every single boot with no race, no timing window, and no dependence on unpredictable state, since ngpios\u003e=2 is a binding-documented configuration (maxItems: 8, and the binding\u0027s own example uses 2 GPIOs). No condition beyond the attacker\u0027s control must be won per attempt.\nPR:N - The out-of-bounds write executes during subsys_initcall driver probe at boot, before any user logs in or is authenticated, so zero privileges are required for the memory corruption to occur. This matches the PR:N assignment given to the directly analogous probe-time undersized-allocation heap overflow in CVE-2025-39869.\nUI:N - No victim action is needed; the corruption happens automatically when the gpio-regulator driver probes the device, and the subsequent out-of-bounds reads occur on routine in-kernel regulator voltage changes.\nS:U - The heap corruption and the wild-pointer dereferences are confined to kernel memory managed by the same security authority; no VM, IOMMU, or sandbox boundary is crossed.\nC:H - Beyond the OOB write, gpio_regulator_set_voltage() and gpio_regulator_set_current_limit() read gpiods[0..nr_gpios-1] past the 8-byte allocation and treat adjacent slab contents as struct gpio_desc pointers, exposing kernel heap data; a heap overflow of this kind is leverageable for arbitrary read.\nI:H - Up to seven attacker/firmware-influenced pointer values are written past the end of the allocation into an adjacent slab object, and the out-of-bounds pointers are then passed to gpiod_set_value_cansleep(), yielding a controlled write primitive exploitable for control-flow hijacking.\nA:H - Slab corruption plus dereference of out-of-bounds heap data as gpio_desc pointers reliably produces a kernel oops or panic \u2014 the identical bug class in CVE-2025-39869 manifested as \"Oops - undefined instruction\" crashes during driver probe."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:01:33.139Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/a3cd5ae7befbac849e0e0529c94ca04e8093cfd2"
        },
        {
          "url": "https://git.kernel.org/stable/c/9fe71972869faed1f8f9b3beb9040f9c1b300c79"
        },
        {
          "url": "https://git.kernel.org/stable/c/56738cbac3bbb1d39a71a07f57484dec1db8b239"
        },
        {
          "url": "https://git.kernel.org/stable/c/a1e12fac214d4f49fcb186dbdf9c5592e7fa0a7a"
        },
        {
          "url": "https://git.kernel.org/stable/c/24418bc77a66cb5be9f5a837431ba3674ed8b52f"
        },
        {
          "url": "https://git.kernel.org/stable/c/e4d19e5d71b217940e33f2ef6c6962b7b68c5606"
        },
        {
          "url": "https://git.kernel.org/stable/c/3830ab97cda9599872625cc0dc7b00160193634f"
        },
        {
          "url": "https://git.kernel.org/stable/c/c9764fd88bc744592b0604ccb6b6fc1a5f76b4e3"
        }
      ],
      "title": "regulator: gpio: Fix the out-of-bounds access to drvdata::gpiods",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-38395",
    "datePublished": "2025-07-25T12:53:39.933Z",
    "dateReserved": "2025-04-16T04:51:24.011Z",
    "dateUpdated": "2026-08-05T12:01:33.139Z",
    "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…