High
netfilter: ipset: mark the rcu locked areas properly
Type: advisorySources: Official CVE List
In the Linux kernel, the following vulnerability has been resolved: netfilter: ipset: mark the rcu locked areas properly When we bump the uref counter, there's no need to keep the rcu lock because the referred hash table can't disappear. Also, from the same reason in mtype_gc we need the rcu lock and not a spinlock.
- Products
- Linux
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-98899
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 29 Oct 2026, 18:04 UTC · Revision 2
Source evidence
netfilter: ipset: mark the rcu locked areas properly
core-cve · Original sourcePublished 23 Oct 2026, 11:54 UTC
In the Linux kernel, the following vulnerability has been resolved: netfilter: ipset: mark the rcu locked areas properly When we bump the uref counter, there's no need to keep the rcu lock because the referred hash table can't disappear. Also, from the same reason in mtype_gc we need the rcu lock and not a spinlock.
cve:CVE-2026-98899
Linux
Fixed versions: Not specified
Linux
Fixed versions: Not specified
Complete source record
{
"id": "da6e328d256d2b915a95a81c139c58a37f0fb6badcaec7f88d599c4b37fca031",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-98899",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "netfilter: ipset: mark the rcu locked areas properly",
"summary": "In the Linux kernel, the following vulnerability has been resolved: netfilter: ipset: mark the rcu locked areas properly When we bump the uref counter, there's no need to keep the rcu lock because the referred hash table can't disappear. Also, from the same reason in mtype_gc we need the rcu lock and not a spinlock.",
"evidence": "cve:CVE-2026-98899",
"products": [
{
"name": {
"value": "Linux",
"evidence": "/containers/cna/affected/0/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
},
{
"name": {
"value": "Linux",
"evidence": "/containers/cna/affected/1/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
}
],
"severity": "high",
"structured": {
"id": "CVE-2026-98899",
"aliases": [
"CVE-2026-98899"
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The attacker must send local NETLINK_NETFILTER IPSET_CMD_CREATE/ADD messages: ip_set_create() starts timeout GC, while ip_set_uadd()->ip_set_ad()->call_ad()->mtype_add() triggers mtype_resize(). Received packets cannot invoke the userspace-only resize path.\nAC:L - The same attacker chooses IPSET_ATTR_TIMEOUT, INITVAL, BUCKETSIZE, and colliding elements, repeatedly causing scheduled mtype_gc() to race attacker-triggered mtype_resize(); no victim-controlled state or hardware failure is required.\nPR:L - nfnetlink_rcv() requires netlink_net_capable(skb, CAP_NET_ADMIN), but this checks sock_net(skb->sk)->user_ns; an unprivileged user can obtain that capability in a new user and network namespace, where ipset state is per-netns.\nUI:N - The attacker creates the timeout set, sends the IPSET_CMD_ADD messages, and lets its scheduled mtype_gc() work execute; no action by another user is required.\nS:U - The stale htable access in mtype_gc() corrupts kernel heap memory within the same host-kernel security authority; it does not cross a guest-host, IOMMU, or comparable scope boundary.\nC:H - If mtype_resize() frees orig before mtype_gc() pins it, mtype_gc_do() follows reclaimed t->hregion and bucket pointers and processes freed entries; this exploitable htable use-after-free permits kernel-memory disclosure.\nI:H - The stale path increments and decrements freed t->uref, locks and updates freed t->hregion data, clears or frees buckets in mtype_gc_do(), and may call mtype_ahash_destroy() again, yielding kernel-heap write and free primitives suitable for code execution.\nA:H - The use-after-free can dereference or spin-lock freed t->hregion and bucket memory, or free the stale table again through mtype_ahash_destroy(), causing an oops, panic, or hang."
}
]
}
],
"affected": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "67bd3d2350d17c2f4fb158c3f917c10b15ecbc94",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "892399abd1a005a455d5b74d86d82b9773405f2b",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "eee5172741b2c0e73210020732043e5d589295d3",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "ecb48c6b9edc78de8dd456c365727ae14b88c1ee",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "0c46c9ce24130657ec7460c27fba5d445f5abd06",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "ca9fab1ca15534cef1630e81a479e94b3bbcdb6a",
"versionType": "git"
},
{
"status": "affected",
"version": "f66ee0410b1c3481ee75e5db9b34547b4d582465",
"lessThan": "5d0c22e73656d050daffad10a2ba8765ce8441c8",
"versionType": "git"
},
{
"status": "affected",
"version": "5dd9488ae41070b69d2f4acb580f77db5705f9ca",
"versionType": "git"
},
{
"status": "affected",
"version": "a469bab3386aebff33c59506f3a95e35b91118fd",
"versionType": "git"
},
{
"status": "affected",
"version": "5.4.24",
"lessThan": "5.5",
"versionType": "semver"
},
{
"status": "affected",
"version": "5.5.8",
"lessThan": "5.6",
"versionType": "semver"
}
],
"programFiles": [
"net/netfilter/ipset/ip_set_hash_gen.h"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "5.6"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "5.6",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "5.10.271",
"versionType": "semver",
"lessThanOrEqual": "5.10.*"
},
{
"status": "unaffected",
"version": "5.15.222",
"versionType": "semver",
"lessThanOrEqual": "5.15.*"
},
{
"status": "unaffected",
"version": "6.1.189",
"versionType": "semver",
"lessThanOrEqual": "6.1.*"
},
{
"status": "unaffected",
"version": "6.6.158",
"versionType": "semver",
"lessThanOrEqual": "6.6.*"
},
{
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver",
"lessThanOrEqual": "6.12.*"
},
{
"status": "unaffected",
"version": "6.18.53",
"versionType": "semver",
"lessThanOrEqual": "6.18.*"
},
{
"status": "unaffected",
"version": "7.2",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"net/netfilter/ipset/ip_set_hash_gen.h"
],
"defaultStatus": "affected"
}
],
"modified": "2026-10-26T06:56:26.708Z",
"provider": "cve",
"references": [
"https://git.kernel.org/stable/c/67bd3d2350d17c2f4fb158c3f917c10b15ecbc94",
"https://git.kernel.org/stable/c/892399abd1a005a455d5b74d86d82b9773405f2b",
"https://git.kernel.org/stable/c/eee5172741b2c0e73210020732043e5d589295d3",
"https://git.kernel.org/stable/c/ecb48c6b9edc78de8dd456c365727ae14b88c1ee",
"https://git.kernel.org/stable/c/0c46c9ce24130657ec7460c27fba5d445f5abd06",
"https://git.kernel.org/stable/c/ca9fab1ca15534cef1630e81a479e94b3bbcdb6a",
"https://git.kernel.org/stable/c/5d0c22e73656d050daffad10a2ba8765ce8441c8"
],
"provider_metadata": {
"cna": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-10-26T06:56:26.708Z"
}
}
},
"related_cves": [
{
"value": "CVE-2026-98899",
"evidence": "/cveMetadata/cveId"
}
],
"security_relevant": true,
"severity_evidence": "/containers/cna/metrics"
},
"source_id": "core-cve",
"document_id": 263357,
"published_at": "2026-10-23T11:54:09.249+00:00"
}