MEDIUM 5.5

CVE-2026-53099: Linux Kernel CFI Configuration Regression Disables BPF Destructor Protection

A configuration naming issue in the Linux kernel's Control Flow Integrity (CFI) implementation causes security-critical code to be inadvertently excluded during compilation. When the kernel build system uses an outdated configuration option name (CONFIG_CFI_CLANG) instead of the current standard (CONFIG_CFI), the CFI protection mechanism for destructors in BPF programs fails to activate, leaving those code paths vulnerable to control flow attacks. This affects systems built with the incorrect configuration flag, potentially on any architecture where CFI is intended as a defense.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.5 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Weaknesses (CWE)
Affected products
1 configuration(s)
Published / Modified
2026-06-24 / 2026-07-21

NVD description (verbatim)

In the Linux kernel, the following vulnerability has been resolved: bpf: Switch CONFIG_CFI_CLANG to CONFIG_CFI This was renamed in commit 23ef9d439769 ("kcfi: Rename CONFIG_CFI_CLANG to CONFIG_CFI") as it is now a compiler-agnostic option. Using the wrong name results in the code getting compiled out. Meaning the CFI failures for btf_dtor_kfunc_t would still trigger.

2 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The Linux kernel underwent a compiler-agnostic refactoring of its CFI (Control Flow Integrity) subsystem, renaming CONFIG_CFI_CLANG to CONFIG_CFI in commit 23ef9d439769. However, the BPF subsystem retained references to the old configuration macro name. When a kernel is compiled with the newer CONFIG_CFI option enabled, any code guarded by the legacy CONFIG_CFI_CLANG preprocessor conditional is compiled out. Specifically, CFI type checking for btf_dtor_kfunc_t (BPF Type Format destructor function types) fails to compile in, meaning indirect calls through destructor callbacks in BPF programs bypass CFI validation. An attacker able to influence BPF program execution or load malicious BPF bytecode could potentially redirect control flow through a destructor function pointer without detection.

Business impact

For organizations running Linux systems that rely on BPF-based monitoring, container runtimes, or in-kernel networking policies, this vulnerability undermines a key integrity control. Systems compiled with the correct modern CFI configuration silently lose CFI protection for a specific BPF feature class, leaving them exposed to privilege escalation or code execution attacks via corrupted BPF destructor pointers. The risk is amplified in environments where unprivileged BPF program loading is permitted or where defense-in-depth strategies depend on CFI as a secondary hardening layer.

Affected systems

Linux kernel systems affected by this issue must meet multiple criteria: (1) the kernel was compiled with CONFIG_CFI enabled (not CONFIG_CFI_CLANG), (2) BPF support is compiled in, and (3) BPF programs using destructors (btf_dtor_kfunc_t) are loaded. This primarily impacts recent Linux distributions that have migrated to the new CFI configuration naming scheme, along with any custom-built or embedded Linux deployments using modern kernel sources without backporting the configuration rename fix.

Exploitability

Exploitation requires either the ability to load BPF programs (traditionally a root or CAP_BPF-privileged operation) or to trigger loading of malicious BPF bytecode through a vulnerable application or container runtime. While BPF loading is restricted by default, several attack paths exist: unprivileged BPF in certain configurations, vulnerable user-space daemons with BPF capabilities, or kernel modules that load untrusted BPF. The actual attack surface depends on local system policy and build configuration, but the vulnerability is not exploitable remotely or without local access. CVSS 5.5 (Medium) reflects local-only access requirement and availability impact.

Remediation

Apply a kernel update that corrects all references from CONFIG_CFI_CLANG to CONFIG_CFI within the BPF subsystem, ensuring CFI type checks for btf_dtor_kfunc_t are compiled in when modern CFI configuration is enabled. Additionally, verify your kernel build configuration: if you are using CONFIG_CFI=y, confirm that your kernel source includes the upstream fix and that CFI protection for BPF destructors is actually compiled in (not optimized away).

Patch guidance

Check your Linux distribution's kernel security advisories for an updated kernel package. For custom kernel builds, update your source tree to include the configuration namespace correction and rebuild with CONFIG_CFI enabled. Verify the fix by checking kernel build artifacts or comparing your source against the upstream Linux repository commit that addresses this issue. Distributions that have not yet shipped a corrected kernel should prioritize this update for systems with BPF enabled and CFI hardening configured.

Detection guidance

On affected systems, you can detect the presence of this vulnerability by examining kernel configuration: check if CONFIG_CFI is enabled while CONFIG_CFI_CLANG is not mentioned (indicating a modern build). Cross-reference this with your kernel version and source tree state. Monitor BPF program load events (via audit or eBPF tracing) if unprivileged BPF loading is permitted; anomalous or failed CFI checks would not surface in logs because the protection is absent. Runtime detection of actual exploitation via corrupted destructor pointers is challenging without CFI, making pre-emptive patching critical.

Why prioritize this

Although this is a Medium-severity local vulnerability without KEV tracking, it represents a regression in a critical kernel hardening feature (CFI) that is increasingly deployed on hardened systems. The configuration namespace confusion is easy to miss during distribution builds, potentially affecting numerous systems silently. For organizations that rely on CFI as part of their kernel defense strategy, restoring this protection should be treated as a priority fix despite the lower CVSS score, because the gap leaves BPF programs unprotected against control flow attacks.

Risk score, explained

The CVSS 3.1 score of 5.5 (Medium) reflects: local attack vector (AV:L) because BPF loading requires local access; low complexity (AC:L) as the vulnerability is a straightforward compilation configuration issue; low privileges (PR:L) since BPF operations traditionally require some privilege (CAP_BPF or root); no user interaction (UI:N); and high availability impact (A:H) from potential system crashes or DoS via corrupted destructor invocations. Confidentiality and integrity are not directly impacted by the missing CFI check itself, though control flow corruption could lead to escalation. The score does not reflect the strategic importance of the defense mechanism being disabled.

Frequently asked questions

How do I know if my kernel is vulnerable?

Your kernel is potentially vulnerable if it was compiled with CONFIG_CFI=y (not CONFIG_CFI_CLANG=y) and includes BPF support. Check /boot/config-* or look at your running kernel's build config. If you see CONFIG_CFI=y and no mention of CONFIG_CFI_CLANG, you have a modern CFI setup. Cross-reference your kernel version against your distribution's security advisory to confirm whether the fix has been applied.

Can this be exploited remotely?

No. Exploitation requires local access and the ability to load or trigger BPF programs. It is not remotely exploitable over a network. However, if your system allows unprivileged BPF program loading (a non-default configuration), the privilege barrier is lower.

What is CFI and why does it matter for BPF?

Control Flow Integrity (CFI) is a compiler-based defense that validates every indirect function call matches an expected type signature. For BPF destructors, CFI prevents attackers from hijacking destructor pointers to run arbitrary code. Without CFI on this specific code path, a corrupted BPF program could call the wrong function with full kernel privileges, potentially escalating or crashing the system.

Do I need to rebuild my kernel, or is a package update sufficient?

For most users, a distribution kernel package update will be sufficient once your vendor releases a patched kernel. If you build your own kernel, you must update your source tree and rebuild with CONFIG_CFI=y to gain the fix. Always verify your kernel configuration after updating.

This analysis is provided for informational purposes and reflects publicly available information as of the publication date. SEC.co makes no warranties regarding the completeness or accuracy of vulnerability details or patch availability. Security teams should verify all information against official vendor advisories, test patches in non-production environments, and consult with their infrastructure teams before deployment. CVSS scores and severity ratings are subject to reinterpretation based on individual network configurations and threat models. Source: NVD (public-domain), retrieved 2026-08-01. Analysis generated by SEC.co (claude-haiku-4-5).