CVE-2025-40123 (GCVE-0-2025-40123)

Vulnerability from cvelistv5 – Published: 2025-11-12 10:23 – Updated: 2026-10-15 22:02
VLAI
Title
bpf: Enforce expected_attach_type for tailcall compatibility
Summary
In the Linux kernel, the following vulnerability has been resolved: bpf: Enforce expected_attach_type for tailcall compatibility Yinhao et al. recently reported: Our fuzzer tool discovered an uninitialized pointer issue in the bpf_prog_test_run_xdp() function within the Linux kernel's BPF subsystem. This leads to a NULL pointer dereference when a BPF program attempts to deference the txq member of struct xdp_buff object. The test initializes two programs of BPF_PROG_TYPE_XDP: progA acts as the entry point for bpf_prog_test_run_xdp() and its expected_attach_type can neither be of be BPF_XDP_DEVMAP nor BPF_XDP_CPUMAP. progA calls into a slot of a tailcall map it owns. progB's expected_attach_type must be BPF_XDP_DEVMAP to pass xdp_is_valid_access() validation. The program returns struct xdp_md's egress_ifindex, and the latter is only allowed to be accessed under mentioned expected_attach_type. progB is then inserted into the tailcall which progA calls. The underlying issue goes beyond XDP though. Another example are programs of type BPF_PROG_TYPE_CGROUP_SOCK_ADDR. sock_addr_is_valid_access() as well as sock_addr_func_proto() have different logic depending on the programs' expected_attach_type. Similarly, a program attached to BPF_CGROUP_INET4_GETPEERNAME should not be allowed doing a tailcall into a program which calls bpf_bind() out of BPF which is only enabled for BPF_CGROUP_INET4_CONNECT. In short, specifying expected_attach_type allows to open up additional functionality or restrictions beyond what the basic bpf_prog_type enables. The use of tailcalls must not violate these constraints. Fix it by enforcing expected_attach_type in __bpf_prog_map_compatible(). Note that we only enforce this for tailcall maps, but not for BPF devmaps or cpumaps: There, the programs are invoked through dev_map_bpf_prog_run*() and cpu_map_bpf_prog_run*() which set up a new environment / context and therefore these situations are not prone to this issue.
SSVC
Exploitation: none Automatable: no Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-10-15 21:57 UTC
Assigner
Linux CNA under the mitre root
CNA scorecard D 53/100 over 7033 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < e53a59e7cee5c1605d1ed595933098c2b69108f9 (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < dc4f348952173beb8ceb15be30b249276eccb605 (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < a99de19128aec0913f3d529f529fbbff5edfaff8 (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < 08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32 (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < c1ad19b5d8e23123503dcaf2d4342e1b90b923ad (git)
Affected: 5e43f899b03a3492ce5fc44e8900becb04dae9c0 , < 4540aed51b12bc13364149bf95f6ecef013197c0 (git)
guessed Create a notification for this product.
Linux Linux Affected: 4.17
Unaffected: 0 , < 4.17 (semver)
Unaffected: 5.10.270 , ≤ 5.10.* (semver)
Unaffected: 5.15.221 , ≤ 5.15.* (semver)
Unaffected: 6.1.156 , ≤ 6.1.* (semver)
Unaffected: 6.6.112 , ≤ 6.6.* (semver)
Unaffected: 6.12.53 , ≤ 6.12.* (semver)
Unaffected: 6.17.3 , ≤ 6.17.* (semver)
Unaffected: 6.18 , ≤ * (original_commit_for_fix)
guessed Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2025-40123",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-15T21:57:04.979824Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-15T22:02:38.256Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "include/linux/bpf.h",
            "kernel/bpf/core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "e53a59e7cee5c1605d1ed595933098c2b69108f9",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "dc4f348952173beb8ceb15be30b249276eccb605",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "a99de19128aec0913f3d529f529fbbff5edfaff8",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "c1ad19b5d8e23123503dcaf2d4342e1b90b923ad",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            },
            {
              "lessThan": "4540aed51b12bc13364149bf95f6ecef013197c0",
              "status": "affected",
              "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "include/linux/bpf.h",
            "kernel/bpf/core.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "4.17"
            },
            {
              "lessThan": "4.17",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.270",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.221",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.156",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.112",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.53",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.17.*",
              "status": "unaffected",
              "version": "6.17.3",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "6.18",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.270",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.221",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.156",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.112",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.53",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.17.3",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18",
                  "versionStartIncluding": "4.17",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Enforce expected_attach_type for tailcall compatibility\n\nYinhao et al. recently reported:\n\n  Our fuzzer tool discovered an uninitialized pointer issue in the\n  bpf_prog_test_run_xdp() function within the Linux kernel\u0027s BPF subsystem.\n  This leads to a NULL pointer dereference when a BPF program attempts to\n  deference the txq member of struct xdp_buff object.\n\nThe test initializes two programs of BPF_PROG_TYPE_XDP: progA acts as the\nentry point for bpf_prog_test_run_xdp() and its expected_attach_type can\nneither be of be BPF_XDP_DEVMAP nor BPF_XDP_CPUMAP. progA calls into a slot\nof a tailcall map it owns. progB\u0027s expected_attach_type must be BPF_XDP_DEVMAP\nto pass xdp_is_valid_access() validation. The program returns struct xdp_md\u0027s\negress_ifindex, and the latter is only allowed to be accessed under mentioned\nexpected_attach_type. progB is then inserted into the tailcall which progA\ncalls.\n\nThe underlying issue goes beyond XDP though. Another example are programs\nof type BPF_PROG_TYPE_CGROUP_SOCK_ADDR. sock_addr_is_valid_access() as well\nas sock_addr_func_proto() have different logic depending on the programs\u0027\nexpected_attach_type. Similarly, a program attached to BPF_CGROUP_INET4_GETPEERNAME\nshould not be allowed doing a tailcall into a program which calls bpf_bind()\nout of BPF which is only enabled for BPF_CGROUP_INET4_CONNECT.\n\nIn short, specifying expected_attach_type allows to open up additional\nfunctionality or restrictions beyond what the basic bpf_prog_type enables.\nThe use of tailcalls must not violate these constraints. Fix it by enforcing\nexpected_attach_type in __bpf_prog_map_compatible().\n\nNote that we only enforce this for tailcall maps, but not for BPF devmaps or\ncpumaps: There, the programs are invoked through dev_map_bpf_prog_run*() and\ncpu_map_bpf_prog_run*() which set up a new environment / context and therefore\nthese situations are not prone to this issue."
        }
      ],
      "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 through the bpf(2) syscall \u2014 loading two programs with differing expected_attach_type, populating a BPF_MAP_TYPE_PROG_ARRAY, and invoking the tail call via BPF_PROG_TEST_RUN or a live attach. No network-supplied data introduces the incompatible tail call, so local access is required.\nAC:L - Exploitation is fully deterministic: the attacker authors and loads both programs, owns the prog array, and controls exactly when the tail call executes; there is no race and no memory-layout condition needed for the mis-typed context dereference to occur.\nPR:L - A basic local user with BPF program-loading access can create the prog array and the two mismatched programs; this matches the established scoring of comparable BPF verifier-constraint bypasses, and containerized/delegated-token deployments grant exactly this level without full administrative rights.\nUI:N - The attacker performs every step \u2014 program load, map update, and program invocation \u2014 entirely on their own; no victim action or cooperation is involved.\nS:U - The mis-typed context dereference and any resulting corruption occur within the kernel that is already the vulnerable component, so impact stays inside a single security authority.\nC:H - xdp_init_buff() never initializes xdp_buff-\u003etxq, so a tail-called BPF_XDP_DEVMAP program reading egress_ifindex dereferences attacker-groomable uninitialized stack memory twice and returns the resulting kernel dword into BPF, which can be exfiltrated through a map \u2014 an effectively arbitrary kernel read primitive.\nI:H - Bypassing expected_attach_type lets a program execute helpers and context writes the running hook never validated \u2014 e.g. bpf_bind()/__inet_bind() invoked from a GETPEERNAME hook mutates live socket binding and hash state without the socket lock, and msg_src_ip4/6 or sockopt level/optname/retval writes land on NULL or wrong-type kernel fields.\nA:H - The reported case is an immediate NULL pointer dereference on xdp_buff-\u003etxq in bpf_prog_test_run_xdp(), and in driver XDP paths the uninitialized txq produces a wild pointer dereference \u2014 either way a kernel oops that the attacker can trigger repeatedly."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-09-14T11:58:08.635Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/e53a59e7cee5c1605d1ed595933098c2b69108f9"
        },
        {
          "url": "https://git.kernel.org/stable/c/dc4f348952173beb8ceb15be30b249276eccb605"
        },
        {
          "url": "https://git.kernel.org/stable/c/a99de19128aec0913f3d529f529fbbff5edfaff8"
        },
        {
          "url": "https://git.kernel.org/stable/c/08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32"
        },
        {
          "url": "https://git.kernel.org/stable/c/f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a"
        },
        {
          "url": "https://git.kernel.org/stable/c/c1ad19b5d8e23123503dcaf2d4342e1b90b923ad"
        },
        {
          "url": "https://git.kernel.org/stable/c/4540aed51b12bc13364149bf95f6ecef013197c0"
        }
      ],
      "title": "bpf: Enforce expected_attach_type for tailcall compatibility",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-40123",
    "datePublished": "2025-11-12T10:23:19.589Z",
    "dateReserved": "2025-04-16T07:20:57.169Z",
    "dateUpdated": "2026-10-15T22:02:38.256Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2025-40123",
      "date": "2026-10-30",
      "epss": "0.00166",
      "percentile": "0.05831"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "defaultStatus": "unaffected",
                "product": "Linux",
                "programFiles": [
                  "include/linux/bpf.h",
                  "kernel/bpf/core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "lessThan": "e53a59e7cee5c1605d1ed595933098c2b69108f9",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "dc4f348952173beb8ceb15be30b249276eccb605",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "a99de19128aec0913f3d529f529fbbff5edfaff8",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "c1ad19b5d8e23123503dcaf2d4342e1b90b923ad",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  },
                  {
                    "lessThan": "4540aed51b12bc13364149bf95f6ecef013197c0",
                    "status": "affected",
                    "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                    "versionType": "git"
                  }
                ]
              },
              {
                "defaultStatus": "affected",
                "product": "Linux",
                "programFiles": [
                  "include/linux/bpf.h",
                  "kernel/bpf/core.c"
                ],
                "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
                "vendor": "Linux",
                "versions": [
                  {
                    "status": "affected",
                    "version": "4.17"
                  },
                  {
                    "lessThan": "4.17",
                    "status": "unaffected",
                    "version": "0",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.10.*",
                    "status": "unaffected",
                    "version": "5.10.270",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "5.15.*",
                    "status": "unaffected",
                    "version": "5.15.221",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.1.*",
                    "status": "unaffected",
                    "version": "6.1.156",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.6.*",
                    "status": "unaffected",
                    "version": "6.6.112",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.12.*",
                    "status": "unaffected",
                    "version": "6.12.53",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "6.17.*",
                    "status": "unaffected",
                    "version": "6.17.3",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "6.18",
                    "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\nbpf: Enforce expected_attach_type for tailcall compatibility\n\nYinhao et al. recently reported:\n\n  Our fuzzer tool discovered an uninitialized pointer issue in the\n  bpf_prog_test_run_xdp() function within the Linux kernel\u0027s BPF subsystem.\n  This leads to a NULL pointer dereference when a BPF program attempts to\n  deference the txq member of struct xdp_buff object.\n\nThe test initializes two programs of BPF_PROG_TYPE_XDP: progA acts as the\nentry point for bpf_prog_test_run_xdp() and its expected_attach_type can\nneither be of be BPF_XDP_DEVMAP nor BPF_XDP_CPUMAP. progA calls into a slot\nof a tailcall map it owns. progB\u0027s expected_attach_type must be BPF_XDP_DEVMAP\nto pass xdp_is_valid_access() validation. The program returns struct xdp_md\u0027s\negress_ifindex, and the latter is only allowed to be accessed under mentioned\nexpected_attach_type. progB is then inserted into the tailcall which progA\ncalls.\n\nThe underlying issue goes beyond XDP though. Another example are programs\nof type BPF_PROG_TYPE_CGROUP_SOCK_ADDR. sock_addr_is_valid_access() as well\nas sock_addr_func_proto() have different logic depending on the programs\u0027\nexpected_attach_type. Similarly, a program attached to BPF_CGROUP_INET4_GETPEERNAME\nshould not be allowed doing a tailcall into a program which calls bpf_bind()\nout of BPF which is only enabled for BPF_CGROUP_INET4_CONNECT.\n\nIn short, specifying expected_attach_type allows to open up additional\nfunctionality or restrictions beyond what the basic bpf_prog_type enables.\nThe use of tailcalls must not violate these constraints. Fix it by enforcing\nexpected_attach_type in __bpf_prog_map_compatible().\n\nNote that we only enforce this for tailcall maps, but not for BPF devmaps or\ncpumaps: There, the programs are invoked through dev_map_bpf_prog_run*() and\ncpu_map_bpf_prog_run*() which set up a new environment / context and therefore\nthese situations are not prone to this issue."
          },
          {
            "lang": "es",
            "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nbpf: Hacer cumplir expected_attach_type para la compatibilidad de tailcall\n\nYinhao et al. informaron recientemente:\n\n  Nuestra herramienta de fuzzing descubri\u00f3 un problema de puntero no\n  inicializado en la funci\u00f3n bpf_prog_test_run_xdp() dentro del subsistema\n  BPF del kernel de Linux. Esto lleva a una desreferencia de puntero NULL\n  cuando un programa BPF intenta desreferenciar el miembro txq del objeto\n  struct xdp_buff.\n\nLa prueba inicializa dos programas de BPF_PROG_TYPE_XDP: progA act\u00faa como\npunto de entrada para bpf_prog_test_run_xdp() y su expected_attach_type no\npuede ser ni BPF_XDP_DEVMAP ni BPF_XDP_CPUMAP. progA llama a una ranura de\nun mapa de tailcall que posee. El expected_attach_type de progB debe ser\nBPF_XDP_DEVMAP para pasar la validaci\u00f3n de xdp_is_valid_access(). El\nprograma devuelve el egress_ifindex de struct xdp_md, y este \u00faltimo solo\npuede ser accedido bajo el expected_attach_type mencionado. progB se inserta\nentonces en el tailcall al que llama progA.\n\nSin embargo, el problema subyacente va m\u00e1s all\u00e1 de XDP. Otro ejemplo son los\nprogramas de tipo BPF_PROG_TYPE_CGROUP_SOCK_ADDR. sock_addr_is_valid_access()\nas\u00ed como sock_addr_func_proto() tienen l\u00f3gica diferente dependiendo del\nexpected_attach_type de los programas. De manera similar, un programa\nadjunto a BPF_CGROUP_INET4_GETPEERNAME no deber\u00eda permit\u00edrsele hacer un\ntailcall a un programa que llama a bpf_bind() fuera de BPF, lo cual solo\nest\u00e1 habilitado para BPF_CGROUP_INET4_CONNECT.\n\nEn resumen, especificar expected_attach_type permite habilitar funcionalidad\no restricciones adicionales m\u00e1s all\u00e1 de lo que permite el bpf_prog_type\nb\u00e1sico. El uso de tailcalls no debe violar estas restricciones. Se soluciona\nhaciendo cumplir expected_attach_type en __bpf_prog_map_compatible().\n\nTenga en cuenta que solo hacemos cumplir esto para los mapas de tailcall,\npero no para los devmaps o cpumaps de BPF: All\u00ed, los programas se invocan a\ntrav\u00e9s de dev_map_bpf_prog_run*() y cpu_map_bpf_prog_run*() que configuran\nun nuevo entorno/contexto y, por lo tanto, estas situaciones no son\npropensas a este problema."
          }
        ],
        "id": "CVE-2025-40123",
        "lastModified": "2026-10-19T21:10:00.160",
        "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"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2025-40123",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-15T21:57:04.979824Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2025-11-12T11:15:41.807",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/4540aed51b12bc13364149bf95f6ecef013197c0"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/a99de19128aec0913f3d529f529fbbff5edfaff8"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/c1ad19b5d8e23123503dcaf2d4342e1b90b923ad"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/dc4f348952173beb8ceb15be30b249276eccb605"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/e53a59e7cee5c1605d1ed595933098c2b69108f9"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Deferred"
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Low",
      "current_release_date": "2026-07-30T10:08:14+00:00",
      "cve": "CVE-2025-40123",
      "id": "CVE-2025-40123",
      "initial_release_date": "2025-11-12T00: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: Enforce expected_attach_type for tailcall compatibility",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2025/cve-2025-40123.json",
      "version": "3"
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2025-40123",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-10-15T21:57:04.979824Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-10-15T21:57:05.943Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "defaultStatus": "unaffected",
              "product": "Linux",
              "programFiles": [
                "include/linux/bpf.h",
                "kernel/bpf/core.c"
              ],
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "vendor": "Linux",
              "versions": [
                {
                  "lessThan": "e53a59e7cee5c1605d1ed595933098c2b69108f9",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "dc4f348952173beb8ceb15be30b249276eccb605",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "a99de19128aec0913f3d529f529fbbff5edfaff8",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "c1ad19b5d8e23123503dcaf2d4342e1b90b923ad",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                },
                {
                  "lessThan": "4540aed51b12bc13364149bf95f6ecef013197c0",
                  "status": "affected",
                  "version": "5e43f899b03a3492ce5fc44e8900becb04dae9c0",
                  "versionType": "git"
                }
              ]
            },
            {
              "defaultStatus": "affected",
              "product": "Linux",
              "programFiles": [
                "include/linux/bpf.h",
                "kernel/bpf/core.c"
              ],
              "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
              "vendor": "Linux",
              "versions": [
                {
                  "status": "affected",
                  "version": "4.17"
                },
                {
                  "lessThan": "4.17",
                  "status": "unaffected",
                  "version": "0",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "5.10.*",
                  "status": "unaffected",
                  "version": "5.10.270",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "5.15.*",
                  "status": "unaffected",
                  "version": "5.15.221",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "6.1.*",
                  "status": "unaffected",
                  "version": "6.1.156",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "6.6.*",
                  "status": "unaffected",
                  "version": "6.6.112",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "6.12.*",
                  "status": "unaffected",
                  "version": "6.12.53",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "6.17.*",
                  "status": "unaffected",
                  "version": "6.17.3",
                  "versionType": "semver"
                },
                {
                  "lessThanOrEqual": "*",
                  "status": "unaffected",
                  "version": "6.18",
                  "versionType": "original_commit_for_fix"
                }
              ]
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "5.10.270",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "5.15.221",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "6.1.156",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "6.6.112",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "6.12.53",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "6.17.3",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    },
                    {
                      "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "6.18",
                      "versionStartIncluding": "4.17",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ]
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nbpf: Enforce expected_attach_type for tailcall compatibility\n\nYinhao et al. recently reported:\n\n  Our fuzzer tool discovered an uninitialized pointer issue in the\n  bpf_prog_test_run_xdp() function within the Linux kernel\u0027s BPF subsystem.\n  This leads to a NULL pointer dereference when a BPF program attempts to\n  deference the txq member of struct xdp_buff object.\n\nThe test initializes two programs of BPF_PROG_TYPE_XDP: progA acts as the\nentry point for bpf_prog_test_run_xdp() and its expected_attach_type can\nneither be of be BPF_XDP_DEVMAP nor BPF_XDP_CPUMAP. progA calls into a slot\nof a tailcall map it owns. progB\u0027s expected_attach_type must be BPF_XDP_DEVMAP\nto pass xdp_is_valid_access() validation. The program returns struct xdp_md\u0027s\negress_ifindex, and the latter is only allowed to be accessed under mentioned\nexpected_attach_type. progB is then inserted into the tailcall which progA\ncalls.\n\nThe underlying issue goes beyond XDP though. Another example are programs\nof type BPF_PROG_TYPE_CGROUP_SOCK_ADDR. sock_addr_is_valid_access() as well\nas sock_addr_func_proto() have different logic depending on the programs\u0027\nexpected_attach_type. Similarly, a program attached to BPF_CGROUP_INET4_GETPEERNAME\nshould not be allowed doing a tailcall into a program which calls bpf_bind()\nout of BPF which is only enabled for BPF_CGROUP_INET4_CONNECT.\n\nIn short, specifying expected_attach_type allows to open up additional\nfunctionality or restrictions beyond what the basic bpf_prog_type enables.\nThe use of tailcalls must not violate these constraints. Fix it by enforcing\nexpected_attach_type in __bpf_prog_map_compatible().\n\nNote that we only enforce this for tailcall maps, but not for BPF devmaps or\ncpumaps: There, the programs are invoked through dev_map_bpf_prog_run*() and\ncpu_map_bpf_prog_run*() which set up a new environment / context and therefore\nthese situations are not prone to this issue."
            }
          ],
          "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 through the bpf(2) syscall \u2014 loading two programs with differing expected_attach_type, populating a BPF_MAP_TYPE_PROG_ARRAY, and invoking the tail call via BPF_PROG_TEST_RUN or a live attach. No network-supplied data introduces the incompatible tail call, so local access is required.\nAC:L - Exploitation is fully deterministic: the attacker authors and loads both programs, owns the prog array, and controls exactly when the tail call executes; there is no race and no memory-layout condition needed for the mis-typed context dereference to occur.\nPR:L - A basic local user with BPF program-loading access can create the prog array and the two mismatched programs; this matches the established scoring of comparable BPF verifier-constraint bypasses, and containerized/delegated-token deployments grant exactly this level without full administrative rights.\nUI:N - The attacker performs every step \u2014 program load, map update, and program invocation \u2014 entirely on their own; no victim action or cooperation is involved.\nS:U - The mis-typed context dereference and any resulting corruption occur within the kernel that is already the vulnerable component, so impact stays inside a single security authority.\nC:H - xdp_init_buff() never initializes xdp_buff-\u003etxq, so a tail-called BPF_XDP_DEVMAP program reading egress_ifindex dereferences attacker-groomable uninitialized stack memory twice and returns the resulting kernel dword into BPF, which can be exfiltrated through a map \u2014 an effectively arbitrary kernel read primitive.\nI:H - Bypassing expected_attach_type lets a program execute helpers and context writes the running hook never validated \u2014 e.g. bpf_bind()/__inet_bind() invoked from a GETPEERNAME hook mutates live socket binding and hash state without the socket lock, and msg_src_ip4/6 or sockopt level/optname/retval writes land on NULL or wrong-type kernel fields.\nA:H - The reported case is an immediate NULL pointer dereference on xdp_buff-\u003etxq in bpf_prog_test_run_xdp(), and in driver XDP paths the uninitialized txq produces a wild pointer dereference \u2014 either way a kernel oops that the attacker can trigger repeatedly."
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-14T11:58:08.635Z",
            "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "shortName": "Linux"
          },
          "references": [
            {
              "url": "https://git.kernel.org/stable/c/e53a59e7cee5c1605d1ed595933098c2b69108f9"
            },
            {
              "url": "https://git.kernel.org/stable/c/dc4f348952173beb8ceb15be30b249276eccb605"
            },
            {
              "url": "https://git.kernel.org/stable/c/a99de19128aec0913f3d529f529fbbff5edfaff8"
            },
            {
              "url": "https://git.kernel.org/stable/c/08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32"
            },
            {
              "url": "https://git.kernel.org/stable/c/f856c598080ba7ce1252867b8ecd6ad5bdaf9a6a"
            },
            {
              "url": "https://git.kernel.org/stable/c/c1ad19b5d8e23123503dcaf2d4342e1b90b923ad"
            },
            {
              "url": "https://git.kernel.org/stable/c/4540aed51b12bc13364149bf95f6ecef013197c0"
            }
          ],
          "title": "bpf: Enforce expected_attach_type for tailcall compatibility",
          "x_generator": {
            "engine": "bippy-1.2.0"
          }
        }
      },
      "cveMetadata": {
        "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "assignerShortName": "Linux",
        "cveId": "CVE-2025-40123",
        "datePublished": "2025-11-12T10:23:19.589Z",
        "dateReserved": "2025-04-16T07:20:57.169Z",
        "dateUpdated": "2026-10-15T22:02:38.256Z",
        "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…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

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.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    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.