CVE-2026-74748

netfilter: ipset: fix refcount race between list:set GC and swap

State
Published
Severity
7.8 High
Published
Aug 26, 2026
Updated
Oct 16, 2026
Reserved
Aug 15, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

netfilter: ipset: fix refcount race between list:set GC and swap

__ip_set_put_byindex() resolved the index to a set pointer under RCU, then took ip_set_ref_lock in __ip_set_put() to decrement set->ref. ip_set_swap() holds that same lock while swapping both the ip_set_list slots and the two sets' ref counters, so it can interleave between the dereference and the lock acquisition, leaving the caller to decrement a set whose reference already moved to the other index and hit BUG_ON(set->ref == 0). list_set_gc() reaches this from timer softirq, which the nfnl mutex does not serialize against swap: an expiring list:set member calls list_set_del() -> ip_set_put_byindex() while IPSET_CMD_SWAP runs on the referenced sets.

Resolve the index and decrement under ip_set_ref_lock, as ip_set_swap() already does, keeping the refcount tied to the index rather than to a stale set pointer.

kernel BUG at net/netfilter/ipset/ip_set_core.c:685! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870) Call Trace: <IRQ> list_set_del (net/netfilter/ipset/ip_set_list_set.c:159) set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181) list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578) call_timer_fn (kernel/time/timer.c:1748) __run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374) run_timer_softirq (kernel/time/timer.c:2405) </IRQ> Kernel panic - not syncing: Fatal exception in interrupt

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 9076aea76538556224e7d73ab718f8841330818a to before 97a01de0c6321b7210d30d0a4d60f10f561097c7Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before c21afc7c216a4d257a4f3f300e0791890bc846b9Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before b0aab9dd1a348b99d75ff52765719d0cc2050630Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before b891e7a6bb06e0f6560e5932665ac660acd12225Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before 20cb13a523f0a05cb2d0a7d72abae687683712e0Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before cb20da33839f28f590c99f16bafaa6151451c0e8Affected
  • 9076aea76538556224e7d73ab718f8841330818a to before 24ffcb1e1688c55fd2a505f064295cd28eac546dAffected
  • 9076aea76538556224e7d73ab718f8841330818a to before 0c88868271653537ed443272dd8e7d13634d214bAffected
LinuxLinux
  • 3.8Affected
  • before 3.8Not affected
  • 5.10.266 through 5.10.*Not affected
  • 5.15.217 through 5.15.*Not affected
  • 6.1.184 through 6.1.*Not affected
  • 6.6.153 through 6.6.*Not affected
  • 6.12.105 through 6.12.*Not affected
  • 6.18.46 through 6.18.*Not affected
  • 7.1.10 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.