CVE-2026-98626
NoneCVSS
—
EPSS
0.2%
Published
Oct 18, 2026
CISA due date
—
Cloudanix analysis
A recent Linux kernel fix stops specially crafted helper programs from quietly changing important internal instructions, reducing the chance that certain low-level tools could be misused to affect system stability.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw allows malformed CO-RE relocation metadata to poison non-relocatable instructions such as jumps, calls, exits, or register arithmetic before validity checks occur, potentially turning unresolved relocations into arbitrary instruction modifications instead of hard failures.
Why it matters to the business
Organizations running affected kernels face a small but non-zero risk that untrusted or attacker-supplied BPF programs could corrupt kernel verifier behavior, leading to stability issues or limited code-execution opportunities in eBPF-heavy environments such as observability, networking, or security tooling.
How an attack unfolds
An attacker crafts a BPF object file containing CO-RE relocation records that target invalid instruction offsets. When the kernel processes the relocation, bpf_core_patch_insn() poisons the instruction before checking its class and operand form, allowing the malformed record to overwrite control-flow or arithmetic instructions and bypass the relocation failure path.
How to fix it
Update to a Linux kernel containing the referenced fix that moves the poisoning step after class and operand-form validation. Rebuild and redeploy any custom BPF programs or distributions that embed the vulnerable CO-RE logic. Where immediate patching is not possible, restrict untrusted BPF loading via LSM or capability controls.
How to confirm the fix worked
Confirm the kernel source contains the updated bpf_core_patch_insn() logic that validates instruction class before calling bpf_core_poison_insn(), and that bpf_core_poison_insn() now handles both halves of ldimm64. Test by attempting to load a deliberately malformed CO-RE relocation and verifying that it produces a hard error rather than a poisoned instruction.
Typical attack path
- Obtain or generate a BPF program with malicious CO-RE relocation metadata
- Load the program via bpf() syscall or through a userspace loader such as libbpf
- Trigger relocation processing in the kernel verifier or loader
- Cause poisoning of a non-relocatable instruction to alter program semantics
- Execute the resulting corrupted BPF program to achieve unintended verifier or runtime behavior
How to detect it
Review kernel audit logs and BPF verifier error messages for unexpected relocation failures or poisoning attempts. Examine system call traces involving bpf() with CO-RE relocation sections for malformed metadata patterns. No widespread exploitation has been observed.
What your security team should do
- Prioritize kernel updates for systems that accept untrusted BPF programs or use extensive CO-RE-based tooling
- Audit BPF loading policies and consider requiring CAP_BPF or LSM mediation
- Monitor upstream stable and distribution kernel releases for the backported fix
- Re-test critical BPF programs after upgrade to ensure relocation behavior remains unchanged
The record
In the Linux kernel, the following vulnerability has been resolved: bpf: Restrict CO-RE poisoning to relocatable instructions CO-RE relocation records can name any instruction offset. When a relocation cannot be resolved, bpf_core_patch_insn() currently poisons its target before checking whether that instruction is a valid relocation target. Malformed metadata can therefore replace jumps, calls, exits, register-source arithmetic, or non-immediate loads instead of failing at the relocation step. Handle poisoning only after the instruction has passed the same class and operand-form checks used for a resolved relocation. Route invalid forms through the existing diagnostic and return a hard error. Keep poisoning supported instructions, including both halves of a plain ldimm64, so an unresolved relocation in dead code remains valid. Extend bpf_core_poison_insn() to poison both halves of ldimm64, and return its status directly from each validated instruction case. This avoids routing the success path through a common label and leaves the helper free to report errors. The shared relocation code applies this restriction to both libbpf and in-kernel CO-RE.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|