5.5

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

Analyzed
AliasesUBUNTU-CVE-2026-31429DEBIAN-CVE-2026-31429
Published 20-04-2026Last modified 11-05-2026

Vulnerability summary

CVE-2026-31429 is a medium (CVSS 5.5) vulnerability in linux. EPSS estimates a 0.26% chance of exploitation in the next 30 days, higher than 17.7% of scored vulnerabilities.

Priority
Routine

Not severe (CVSS 5.5, local access); no exploitation reported by the 5 checked sources

Source freshness unavailable

How is this decided?
CVSS score
5.5/10
010
Medium · v3.1 (NVD)
EPSS score
0.26%
0%100%
Low · +0.10 pp in 30 days
KEVNot listedNot listed by any tracked catalog.
RansomwareNot flaggedNo ransomware use recorded.
Public exploits0No public exploits recorded

Advisory lineage

Upstream 0 · Downstream 25 · Related 25

Timeline

  1. 20-04-2026
    PublishedVulnerability first disclosed.
  2. 11-05-2026
    Last modifiedVulnerability information updated.

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.

CVSS metrics

3 scores · 3 sources · 1 version

EPSS trend

Probability

0.26%

Chance of exploitation in the next 30 days

Percentile

18%

Versus all other CVEs

30-day change

Increase +0.10 pp

From 0.16% on 04-10-2026

04-10-202603-11-2026

Known exploited

Compare KEV catalogs
CISA KEV

Not in the CISA KEV catalog.

ENISA CNW

Not in the ENISA CNW catalog.

CIRCL

Not in the CIRCL catalog.

Public exploits

0 found

No public exploits indexed.

Weaknesses

CWE · root cause

Affected systems

Version check

Known conditions: local access, low-privilege account, no user interaction (CVSS vector). Other conditions: not stated in public data.

Ubuntu130 products
  • linux< 6.8.0-136.136 | All versions (No fix recorded)
  • linux-allwinner-5.19All versions (No fix recorded)
  • linux-aws< 6.8.0-1061.64 | All versions (No fix recorded)
  • linux-aws-5.0All versions (No fix recorded)
  • linux-aws-5.11All versions (No fix recorded)
Linux2 products
  • linux≥ bf9f1baa279f0758dc2297080360c5a616843927, < 128b03ccb2582a643983a48a37fda58df80edbde | ≥ bf9f1baa279f0758dc2297080360c5a616843927, < 60313768a8edc7094435975587c00c2d7b834083 | ≥ bf9f1baa279f0758dc2297080360c5a616843927, < 2d64618ea846d8d033477311f805ca487d6a6696 | ≥ bf9f1baa279f0758dc2297080360c5a616843927, < 474e00b935db250cac320d10c1d3cf4e44b46721 | ≥ bf9f1baa279f0758dc2297080360c5a616843927, < 0f42e3f4fe2a58394e37241d02d9ca6ab7b7d516 | 6.3
  • linux_kernel≥ 6.3, < 6.6.136 | ≥ 6.7, < 6.12.82 | ≥ 6.13, < 6.18.23 | ≥ 6.19, < 6.19.13 | 7.0:rc1 | 7.0:rc2 | 7.0:rc3 | 7.0:rc4 | 7.0:rc5 | 7.0:rc6 | 7.0:rc7
Debian1 product
  • linux< 6.12.85-1 | < 6.19.13-1

3 vendors · 133 products

References

23 links
Show all 23 references