CVE-2026-31429 in Linux
Zusammenfassung
von VulDB • 26.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net: skb: Behebung des Cross-Cache-Free von KFENCE-allokiertem SKB-Head
SKB_SMALL_HEAD_CACHE_SIZE ist absichtlich auf einen Wert ungleich einer Zweierpotenz (z. B. 704 auf x86_64) festgelegt, um Kollisionen mit den Größen der generischen kmalloc-Buckets zu vermeiden. Dies stellt sicher, dass skb_kfree_head() skb_end_offset zuverlässig nutzen kann, um SKB-Heads, die aus skb_small_head_cache stammen, von solchen aus generischen kmalloc-Caches zu unterscheiden.
Wenn jedoch KFENCE aktiviert ist, gibt kfence_ksize() die exakt angeforderte Allokationsgröße zurück und nicht die Slab-Bucket-Größe. Wenn ein Aufrufer (z. B. bpf_test_init) SKB-Head-Daten über kzalloc() alloziert und die angeforderte Größe zufällig mit SKB_SMALL_HEAD_CACHE_SIZE übereinstimmt, gibt slab_build_skb() -> ksize() diesen exakten Wert zurück. Nach Abzug des skb_shared_info-Overheads entspricht skb_end_offset schließlich SKB_SMALL_HEAD_HEADROOM, wodurch skb_kfree_head() das Objekt fälschlicherweise an skb_small_head_cache und nicht an den ursprünglichen kmalloc-Cache freigibt, was zu einem Slab-Cross-Cache-Free führt:
kmem_cache_free(skbuff_small_head): Falscher Slab-Cache. Erwartet skbuff_small_head, aber kmalloc-1k erhalten.
Dies wird behoben, indem in skb_kfree_head() stets kfree(head) aufgerufen wird. Dies hält den Freigabepfad generisch und vermeidet eine allocator-spezifische Fehlklassifizierung für KFENCE-Objekte.
If you want to get best quality of vulnerability data, you may have to visit VulDB.