GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration

CVE-2025-39990 (GCVE-0-2025-39990)

Vulnerability from cvelistv5 – Published: 2025-10-15 07:56 – Updated: 2026-08-05 12:06
VLAI
Title
bpf: Check the helper function is valid in get_helper_proto
Summary
In the Linux kernel, the following vulnerability has been resolved: bpf: Check the helper function is valid in get_helper_proto kernel test robot reported verifier bug [1] where the helper func pointer could be NULL due to disabled config option. As Alexei suggested we could check on that in get_helper_proto directly. Marking tail_call helper func with BPF_PTR_POISON, because it is unused by design. [1] https://lore.kernel.org/oe-lkp/202507160818.68358831-lkp@intel.com
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: f470378c7562a2818b45ed11c98973f2b89eedd3 , < 3d429cb1278e995e22995ef117fa96d223a67e93 (git)
Affected: f470378c7562a2818b45ed11c98973f2b89eedd3 , < 6233715b4b714068d6c831d214a4e8792109875a (git)
Affected: f470378c7562a2818b45ed11c98973f2b89eedd3 , < e4414b01c1cd9887bbde92f946c1ba94e40d6d64 (git)
guessed Create a notification for this product.
Linux Linux Affected: 5.8
Unaffected: 0 , < 5.8 (semver)
Unaffected: 6.12.50 , ≤ 6.12.* (semver)
Unaffected: 6.16.10 , ≤ 6.16.* (semver)
Unaffected: 6.17 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "kernel/bpf/core.c",
            "kernel/bpf/verifier.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "3d429cb1278e995e22995ef117fa96d223a67e93",
              "status": "affected",
              "version": "f470378c7562a2818b45ed11c98973f2b89eedd3",
              "versionType": "git"
            },
            {
              "lessThan": "6233715b4b714068d6c831d214a4e8792109875a",
              "status": "affected",
              "version": "f470378c7562a2818b45ed11c98973f2b89eedd3",
              "versionType": "git"
            },
            {
              "lessThan": "e4414b01c1cd9887bbde92f946c1ba94e40d6d64",
              "status": "affected",
              "version": "f470378c7562a2818b45ed11c98973f2b89eedd3",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "kernel/bpf/core.c",
            "kernel/bpf/verifier.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "5.8"
            },
            {
              "lessThan": "5.8",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.50",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.16.*",
              "status": "unaffected",
              "version": "6.16.10",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.17",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.50",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.16.10",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.17",
                  "versionStartIncluding": "5.8",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Check the helper function is valid in get_helper_proto\n\nkernel test robot reported verifier bug [1] where the helper func\npointer could be NULL due to disabled config option.\n\nAs Alexei suggested we could check on that in get_helper_proto\ndirectly. Marking tail_call helper func with BPF_PTR_POISON,\nbecause it is unused by design.\n\n  [1] https://lore.kernel.org/oe-lkp/202507160818.68358831-lkp@intel.com"
        }
      ],
      "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 vulnerability is reached only through the local `bpf(BPF_PROG_LOAD)` syscall, which is used to submit the crafted program to the verifier. There is no remote or adjacent-network path into `get_helper_proto()`.\nAC:L - On an affected build the attacker deterministically triggers the bug every time by loading a program that calls a helper whose weak proto is zeroed \u2014 no race, no memory-layout dependency, no unpredictable state. Both the `verifier_bug()` WARN path and the `bpf_get_branch_snapshot` inline path are fully under the attacker\u0027s control via the program bytecode.\nPR:L - Program load plus `CAP_PERFMON`/`CAP_BPF` is required, but `CAP_PERFMON` is a narrow, non-root capability commonly granted to unprivileged profiling and BPF observability daemons, and `bpf_token_capable()` explicitly makes it delegable to unprivileged users inside user namespaces via bpffs BPF tokens. This is an ordinary low-privileged account boundary, not init-namespace root.\nUI:N - The attacker loads and exercises the BPF program entirely on their own; no other user or administrator has to perform any action.\nS:U - The corruption and the crash both occur inside the kernel that is already the security authority for the calling process \u2014 a conventional local kernel privilege-escalation/DoS, with no VM, IOMMU, or sandbox boundary crossed.\nC:H - With all `arg_type[]` zeroed to `ARG_DONTCARE` the verifier validates nothing, and the inlined `bpf_get_branch_snapshot` copies LBR records (kernel from/to instruction pointers) to an attacker-chosen destination that can be a readable BPF map value, disclosing kernel text addresses and defeating KASLR; the same unvalidated-pointer primitive generalizes to broader kernel memory disclosure.\nI:H - `__intel_pmu_snapshot_branch_stack()` performs `memcpy(entries, cpuc-\u003elbr_entries, 24 * cnt)` with `entries` an entirely unvalidated attacker-supplied scalar, giving an arbitrary kernel-memory write of up to several hundred bytes \u2014 a direct privilege-escalation primitive.\nA:H - The common path hits `verifier_bug()` \u2192 `BPF_WARN_ONCE`, which taints the kernel and panics outright on the many hardened/production and Android kernels that set `panic_on_warn=1`; the arbitrary-write path trivially oopses the kernel by targeting unmapped or critical memory."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:06:56.969Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/3d429cb1278e995e22995ef117fa96d223a67e93"
        },
        {
          "url": "https://git.kernel.org/stable/c/6233715b4b714068d6c831d214a4e8792109875a"
        },
        {
          "url": "https://git.kernel.org/stable/c/e4414b01c1cd9887bbde92f946c1ba94e40d6d64"
        }
      ],
      "title": "bpf: Check the helper function is valid in get_helper_proto",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-39990",
    "datePublished": "2025-10-15T07:56:07.295Z",
    "dateReserved": "2025-04-16T07:20:57.150Z",
    "dateUpdated": "2026-08-05T12:06:56.969Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-39990",
      "date": "2026-09-16",
      "epss": "0.00151",
      "percentile": "0.04634"
    },
    "microsoft_vex": {
      "current_release_date": "2026-09-16T01:45:11.000Z",
      "cve": "CVE-2025-39990",
      "id": "msrc_CVE-2025-39990",
      "initial_release_date": "2025-10-16T01:03:00.000Z",
      "product_status:known_affected": "18",
      "source": "Microsoft CSAF VEX",
      "status": "final",
      "title": "bpf: Check the helper function is valid in get_helper_proto",
      "url": "https://msrc.microsoft.com/csaf/vex/2025/msrc_cve-2025-39990.json",
      "version": "18"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2025-39990\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2025-10-15T08:15:37.060\",\"lastModified\":\"2026-07-30T06:24:05.093\",\"vulnStatus\":\"Deferred\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nbpf: Check the helper function is valid in get_helper_proto\\n\\nkernel test robot reported verifier bug [1] where the helper func\\npointer could be NULL due to disabled config option.\\n\\nAs Alexei suggested we could check on that in get_helper_proto\\ndirectly. Marking tail_call helper func with BPF_PTR_POISON,\\nbecause it is unused by design.\\n\\n  [1] https://lore.kernel.org/oe-lkp/202507160818.68358831-lkp@intel.com\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"kernel/bpf/core.c\",\"kernel/bpf/verifier.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"f470378c7562a2818b45ed11c98973f2b89eedd3\",\"lessThan\":\"3d429cb1278e995e22995ef117fa96d223a67e93\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"f470378c7562a2818b45ed11c98973f2b89eedd3\",\"lessThan\":\"6233715b4b714068d6c831d214a4e8792109875a\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"f470378c7562a2818b45ed11c98973f2b89eedd3\",\"lessThan\":\"e4414b01c1cd9887bbde92f946c1ba94e40d6d64\",\"versionType\":\"git\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"kernel/bpf/core.c\",\"kernel/bpf/verifier.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"5.8\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"5.8\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.12.50\",\"lessThanOrEqual\":\"6.12.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.16.10\",\"lessThanOrEqual\":\"6.16.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"6.17\",\"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:H/I:H/A:H\",\"baseScore\":7.8,\"baseSeverity\":\"HIGH\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"LOW\",\"userInteraction\":\"NONE\",\"scope\":\"UNCHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":1.8,\"impactScore\":5.9}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/3d429cb1278e995e22995ef117fa96d223a67e93\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/6233715b4b714068d6c831d214a4e8792109875a\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/e4414b01c1cd9887bbde92f946c1ba94e40d6d64\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "redhat_vex": {
      "aggregate_severity": "Low",
      "current_release_date": "2026-07-30T10:08:17+00:00",
      "cve": "CVE-2025-39990",
      "id": "CVE-2025-39990",
      "initial_release_date": "2025-10-15T00:00:00+00:00",
      "product_status:known_affected": "260",
      "product_status:known_not_affected": "14",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "kernel: bpf: Check the helper function is valid in get_helper_proto",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-39990.json",
      "version": "3"
    },
    "suse_vex": {
      "aggregate_severity": "moderate",
      "current_release_date": "2026-09-11T01:57:03Z",
      "cve": "CVE-2025-39990",
      "id": "CVE-2025-39990",
      "initial_release_date": "2025-10-16T23:24:15Z",
      "product_status:first_fixed": "2",
      "product_status:known_affected": "341",
      "product_status:known_not_affected": "6",
      "product_status:recommended": "154",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2025-39990",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2025-39990.json",
      "version": "24"
    }
  }
}



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…