CVE-2026-31429

MEDIUM

net: skb: fix cross-cache free of KFENCE-allocated skb head

Title source: cna
STIX 2.1

Exploitation Summary

EIP tracks 5 public exploits for CVE-2026-31429. PoCs published by Unclecheng-li, adminlove520, MillerDetach.

AI-analyzed exploit summary This repository contains a functional PoC for CVE-2026-31429, a Linux kernel slab cross-cache confusion vulnerability. The exploit triggers a slab corruption by freeing a KFENCE-allocated SKB head to the wrong slab cache, demonstrated via a BPF syscall-based trigger.

Description

In the Linux kernel, the following vulnerability has been resolved: net: skb: fix cross-cache free of KFENCE-allocated skb head SKB_SMALL_HEAD_CACHE_SIZE is intentionally set to a non-power-of-2 value (e.g. 704 on x86_64) to avoid collisions with generic kmalloc bucket sizes. This ensures that skb_kfree_head() can reliably use skb_end_offset to distinguish skb heads allocated from skb_small_head_cache vs. generic kmalloc caches. However, when KFENCE is enabled, kfence_ksize() returns the exact requested allocation size instead of the slab bucket size. If a caller (e.g. bpf_test_init) allocates skb head data via kzalloc() and the requested size happens to equal SKB_SMALL_HEAD_CACHE_SIZE, then slab_build_skb() -> ksize() returns that exact value. After subtracting skb_shared_info overhead, skb_end_offset ends up matching SKB_SMALL_HEAD_HEADROOM, causing skb_kfree_head() to incorrectly free the object to skb_small_head_cache instead of back to the original kmalloc cache, resulting in a slab cross-cache free: kmem_cache_free(skbuff_small_head): Wrong slab cache. Expected skbuff_small_head but got kmalloc-1k Fix this by always calling kfree(head) in skb_kfree_head(). This keeps the free path generic and avoids allocator-specific misclassification for KFENCE objects.

Exploits (5)

github WORKING POC 161 stars
by Unclecheng-li · cpoc
https://github.com/Unclecheng-li/poc-lab/tree/main/CVE-2026-31429 Slab Cross-Cache

This repository contains a functional PoC for CVE-2026-31429, a Linux kernel slab cross-cache confusion vulnerability. The exploit triggers a slab corruption by freeing a KFENCE-allocated SKB head to the wrong slab cache, demonstrated via a BPF syscall-based trigger.

Classification
Working Poc 95%
Attack Type
Dos
Complexity
Moderate
Reliability
Reliable
Target: Linux Kernel (6.3 ≤ kernel < 6.6.136, 6.7 ≤ kernel < 6.12.82, 6.13 ≤ kernel < 6.18.23, 6.19 ≤ kernel < 6.19.13, 7.0-rc1 ≤ kernel ≤ 7.0-rc7)
No auth needed
Prerequisites: CONFIG_KFENCE=y · CONFIG_BPF_SYSCALL=y · Local non-privileged user access
devstral-2 · analyzed May 22, 2026 Full analysis →
github WRITEUP 4 stars
by adminlove520 · pythonpoc
https://github.com/adminlove520/CVE-Poc_All_in_One/tree/main/2026/CVE-2026-31429

This repository provides a detailed technical analysis of CVE-2026-31429, a slab cross-cache confusion bug in the Linux kernel's networking stack. It includes a root cause analysis, patch details, and reproduction evidence, but the PoC is explicitly labeled as non-working.

Classification
Writeup 100%
Attack Type
Dos
Complexity
Moderate
Reliability
Theoretical
Target: Linux Kernel >= 6.3
Auth required
Prerequisites: Linux Kernel >= 6.3 with KFENCE enabled · root privileges for BPF_PROG_LOAD
devstral-2 · analyzed May 14, 2026 Full analysis →
github WORKING POC
by MillerDetach · pythonpoc
https://github.com/MillerDetach/poc-lab-pro/tree/main/CVE-2026-31429 Slab Cross-Cache

This repository contains a functional PoC for CVE-2026-31429, a Linux kernel slab cross-cache confusion vulnerability. The exploit triggers a KFENCE-allocated SKB head being freed to the wrong slab cache, resulting in a kernel warning (warn_free_bad_obj).

Classification
Working Poc 95%
Attack Type
Dos
Complexity
Moderate
Reliability
Reliable
Target: Linux Kernel (6.3 ≤ kernel < 6.6.136, 6.7 ≤ kernel < 6.12.82, 6.13 ≤ kernel < 6.18.23, 6.19 ≤ kernel < 6.19.13, 7.0-rc1 ≤ kernel ≤ 7.0-rc7)
No auth needed
Prerequisites: CONFIG_KFENCE=y · CONFIG_BPF_SYSCALL=y · Local non-privileged user access
devstral-2 · analyzed Jun 09, 2026 Full analysis →
github WORKING POC
by SmashMythAmp · pythonpoc
https://github.com/SmashMythAmp/poc-lab-605/tree/main/CVE-2026-31429 Slab Cross-Cache

This repository contains a functional PoC for CVE-2026-31429, a Linux kernel slab cross-cache confusion vulnerability. The exploit triggers a KFENCE-allocated SKB head being freed to the wrong slab cache, demonstrated via a BPF program that causes a kernel warning.

Classification
Working Poc 95%
Attack Type
Dos
Complexity
Moderate
Reliability
Reliable
Target: Linux Kernel (6.3 ≤ kernel < 6.6.136, 6.7 ≤ kernel < 6.12.82, 6.13 ≤ kernel < 6.18.23, 6.19 ≤ kernel < 6.19.13, 7.0-rc1 ≤ kernel ≤ 7.0-rc7)
No auth needed
Prerequisites: CONFIG_KFENCE=y · CONFIG_BPF_SYSCALL=y · Local non-privileged user access
devstral-2 · analyzed Jun 06, 2026 Full analysis →
nomisec WORKING POC
by bluedragonsecurity · poc
https://github.com/bluedragonsecurity/CVE-2026-31429-POC

This repository contains a functional proof-of-concept for CVE-2026-31429, a Linux kernel slab cross-cache confusion bug in the networking stack. The PoC exploits a flaw in `skb_kfree_head()` when KFENCE is enabled, leading to incorrect free operations and potential kernel corruption.

Classification
Working Poc 95%
Attack Type
Dos
Complexity
Moderate
Reliability
Reliable
Target: Linux Kernel >= 6.3
Auth required
Prerequisites: Linux Kernel >= 6.3 with KFENCE enabled · root privileges · BPF_SYSCALL and NET_SCH_INGRESS configured
devstral-2 · analyzed Apr 24, 2026 Full analysis →

Scores

CVSS v3 5.5
EPSS 0.0001
EPSS Percentile 3.3%
Attack Vector LOCAL
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Details

CWE
CWE-401
Status published
Products (14)
Linux/Linux < 6.3
Linux/Linux 6.12.82 - 6.12.*
Linux/Linux 6.18.23 - 6.18.*
Linux/Linux 6.19.13 - 6.19.*
Linux/Linux 6.3
Linux/Linux 6.6.136 - 6.6.*
Linux/Linux 7.0
Linux/Linux bf9f1baa279f0758dc2297080360c5a616843927 - 0f42e3f4fe2a58394e37241d02d9ca6ab7b7d516
Linux/Linux bf9f1baa279f0758dc2297080360c5a616843927 - 128b03ccb2582a643983a48a37fda58df80edbde
Linux/Linux bf9f1baa279f0758dc2297080360c5a616843927 - 2d64618ea846d8d033477311f805ca487d6a6696
... and 4 more
Published Apr 20, 2026
Tracked Since Apr 20, 2026