CVE-2024-26924

netfilter: nft_set_pipapo: do not free live element

HIGH
7.8
CVSS Score
Published: April 24, 2024 at 09:49 PM UTC
Updated: August 5, 2026 at 12:04 PM UTC
2 products affected across 2 vendorsLinux KernelDebian Linux

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH7.8
Exploit prediction
EPSS 0.8%
SSVC
No known exploit

Description

In the Linux kernel, the following vulnerability has been resolved: netfilter: nft_set_pipapo: do not free live element Pablo reports a crash with large batches of elements with a back-to-back add/remove pattern. Quoting Pablo: add_elem("00000000") timeout 100 ms ... add_elem("0000000X") timeout 100 ms del_elem("0000000X") <---------------- delete one that was just added ... add_elem("00005000") timeout 100 ms 1) nft_pipapo_remove() removes element 0000000X Then, KASAN shows a splat. Looking at the remove function there is a chance that we will drop a rule that maps to a non-deactivated element. Removal happens in two steps, first we do a lookup for key k and return the to-be-removed element and mark it as inactive in the next generation. Then, in a second step, the element gets removed from the set/map. The _remove function does not work correctly if we have more than one element that share the same key. This can happen if we insert an element into a set when the set already holds an element with same key, but the element mapping to the existing key has timed out or is not active in the next generation. In such case its possible that removal will unmap the wrong element. If this happens, we will leak the non-deactivated element, it becomes unreachable. The element that got deactivated (and will be freed later) will remain reachable in the set data structure, this can result in a crash when such an element is retrieved during lookup (stale pointer). Add a check that the fully matching key does in fact map to the element that we have marked as inactive in the deactivation step. If not, we need to continue searching. Add a bug/warn trap at the end of the function as well, the remove function must not ever be called with an invisible/unreachable/non-existent element. v2: avoid uneeded temporary variable (Stefano)

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

5.11 ≤ v < 5.15.1575.16 ≤ v < 6.1.885.6 ≤ v < 5.10.2165.6 ≤ v < 5.15.1575.6 ≤ v < 6.1.885.6 ≤ v < 6.6.295.6 ≤ v < 6.8.85.6 ≤ v < 6.96.2 ≤ v < 6.6.296.7 ≤ v < 6.8.83c4287f620443c4287f62044a90e73a561aa05fc46e62da173da6.9 rc16.9 rc26.9 rc36.9 rc4
Vendor states this is fixed in 14b001ba221136c15f894577253e8db535b99487 (fixed)
Vendor states this is fixed in 3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc (fixed)
Vendor states this is fixed in 41d8fdf3afaff312e17466e4ab732937738d5644 (fixed)
Vendor states this is fixed in 7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46 (fixed)
Vendor states this is fixed in e3b887a9c11caf8357a821260e095f2a694a34f2 (fixed)
Vendor states this is fixed in ebf7c9746f073035ee26209e38c3a1170f7b349a (fixed)
Vendor states this is fixed in 5.10.216 (unaffected)
Vendor states this is fixed in 5.15.157 (unaffected)
Vendor states this is fixed in 5.6 (unaffected)
Vendor states this is fixed in 6.1.88 (unaffected)
Vendor states this is fixed in 6.6.29 (unaffected)
Vendor states this is fixed in 6.8.8 (unaffected)
Vendor states this is fixed in 6.9 (unaffected)

References (10)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/14b001ba221136c15f894577253e8db535b99487
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/3cfc9ec039af60dbd8965ae085b2c2ccdcfbe1cc
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/41d8fdf3afaff312e17466e4ab732937738d5644
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/7a1679e2d9bfa3b5f8755c2c7113e54b7d42bd46
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/e3b887a9c11caf8357a821260e095f2a694a34f2
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/ebf7c9746f073035ee26209e38c3a1170f7b349a
Mailing ListThird Party Advisory
Source: af854a3a-2127-422b-91ae-364da2661108
https://lists.debian.org/debian-lts-announce/2024/06/msg00017.html

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

7.8HIGHLinux
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-476

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card