CVE-2025-40123

bpf: Enforce expected_attach_type for tailcall compatibility

State
Published
Severity
7.8 High
Published
Nov 12, 2025
Updated
Oct 15, 2026
Reserved
Apr 16, 2025

Read the record on cve.org

Description

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.

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before e53a59e7cee5c1605d1ed595933098c2b69108f9Affected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before dc4f348952173beb8ceb15be30b249276eccb605Affected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before a99de19128aec0913f3d529f529fbbff5edfaff8Affected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before 08cb3dc9d2b44f153d0bcf2cb966e4a94b5d0f32Affected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before f856c598080ba7ce1252867b8ecd6ad5bdaf9a6aAffected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before c1ad19b5d8e23123503dcaf2d4342e1b90b923adAffected
  • 5e43f899b03a3492ce5fc44e8900becb04dae9c0 to before 4540aed51b12bc13364149bf95f6ecef013197c0Affected
LinuxLinux
  • 4.17Affected
  • before 4.17Not affected
  • 5.10.270 through 5.10.*Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.156 through 6.1.*Not affected
  • 6.6.112 through 6.6.*Not affected
  • 6.12.53 through 6.12.*Not affected
  • 6.17.3 through 6.17.*Not affected
  • 6.18 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.