{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-89488","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","state":"PUBLISHED","assignerShortName":"Linux","dateReserved":"2026-09-11T19:38:34.713Z","datePublished":"2026-09-11T19:43:41.471Z","dateUpdated":"2026-09-14T12:00:23.517Z"},"containers":{"cna":{"providerMetadata":{"orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","shortName":"Linux","dateUpdated":"2026-09-14T12:00:23.517Z"},"descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nopenvswitch: Fix CT limit teardown use-after-free\n\nPacket processing uses CT limit state under RCU, while netns teardown\nfrees that state under ovs_mutex. The CT limit pointer was neither removed\nfrom readers nor protected by a grace period, allowing packet processing to\ndereference the freed state.\n\nAn unprivileged user can trigger this bug from a user and network\nnamespace, causing a slab-use-after-free in ovs_ct_execute() when the\nnetns is torn down.\n\nPublish the CT limit pointer through RCU, remove it before teardown, and\nwait for readers before freeing its contents. Keep ovs_mutex around\nindividual CT limit updates, and use the RCU read-side lock while GET\ntraverses the RCU-protected limit lists.\n\nNetns teardown detaches the RCU-protected CT limit state in the pernet\n.pre_exit callback while holding ovs_mutex.  The pernet core guarantees an\nRCU grace period between the .pre_exit and .exit callbacks, so the .exit\ncallback completes the teardown without adding any extra synchronization.\n\nThe netlink command handlers do not need NULL checks because the userspace\nnetlink socket holds an active reference to its network namespace while a\nrequest is processed. The per-netns exit path therefore cannot run\nconcurrently with SET, DEL, or GET for that socket's namespace."}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","baseScore":7.8,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:L - The UAF is reached from the OVS datapath CT commit path (ovs_ct_execute/ovs_ct_check_limit) while the attacker's netns is torn down. Setup uses local genetlink (datapath, CT flow, CT_LIMIT SET) and packet injection via a vport (veth/TUN/internal) or OVS_PACKET_CMD_EXECUTE; this is not a remotely triggered protocol parser.\nAC:L - The attacker controls both sides of the race: they enable CT limits, install a CT-commit flow, inject packets so ovs_ct_check_limit runs under RCU, and destroy the netns so ovs_ct_limit_exit kfree()s the same object without a grace period. Success does not depend on victim-only timing.\nPR:L - OVS genetlink families are netnsok and use GENL_UNS_ADMIN_PERM, so CAP_NET_ADMIN is checked in the socket's user namespace (unshare -Urn). The fix commit states an unprivileged user can trigger the slab-use-after-free from a user and network namespace.\nUI:N - Exploitation needs only the attacker's own netlink setup, packet injection, and netns teardown. No victim action such as mounting a filesystem, opening a file, or clicking a prompt is required.\nS:U - This is kernel slab use-after-free in the host Open vSwitch datapath. Impact stays in the same kernel security authority and is not a VM escape, IOMMU/DMA bypass, or other cross-boundary compromise.\nC:H - ovs_ct_check_limit/ct_limit_get dereference freed ovs_ct_limit_info and walk its kmalloc'd limits hlist after ovs_ct_limit_exit kfree()s them, a slab UAF that can be reclaimed and used for arbitrary kernel reads.\nI:H - With a finite zone limit, nf_conncount_count_skb() inserts into nf_conncount_data after nf_conncount_destroy(); combined with UAF of the limits table this is a write-after-free/heap primitive that can be turned into arbitrary write or control-flow hijack.\nA:H - The commit reports a slab-use-after-free in ovs_ct_execute() on netns teardown. UAF of CT-limit and conncount objects can oops/panic the kernel even when not fully exploited for code execution."}]}],"affected":[{"product":"Linux","vendor":"Linux","defaultStatus":"unaffected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/openvswitch/conntrack.c","net/openvswitch/conntrack.h","net/openvswitch/datapath.c","net/openvswitch/datapath.h"],"versions":[{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"239f26589a6926db28c436e14f28517581ef1385","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"3b9369881b403f4cdbb11fa998554382bdcc3d8c","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"3b41d907400cc1dd1da9555b81dca422b1f44433","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"680f20d5937fa4d1367c59fe83091b78041015f5","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"bf4aaa7ea2579e24ed7de2e20578a875bebca011","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"e15407c3a8a005324f633cd46cd8fb58042c1157","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"6a6d36fadb8537d9b79e72c9fa51885ec0c33e10","status":"affected","versionType":"git"},{"version":"11efd5cb04a184eea4f57b68ea63dddd463158d1","lessThan":"403f96c32c9e24600093d7d0c61c17daeedca957","status":"affected","versionType":"git"}]},{"product":"Linux","vendor":"Linux","defaultStatus":"affected","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/openvswitch/conntrack.c","net/openvswitch/conntrack.h","net/openvswitch/datapath.c","net/openvswitch/datapath.h"],"versions":[{"version":"4.18","status":"affected"},{"version":"0","lessThan":"4.18","status":"unaffected","versionType":"semver"},{"version":"5.10.270","lessThanOrEqual":"5.10.*","status":"unaffected","versionType":"semver"},{"version":"5.15.221","lessThanOrEqual":"5.15.*","status":"unaffected","versionType":"semver"},{"version":"6.1.188","lessThanOrEqual":"6.1.*","status":"unaffected","versionType":"semver"},{"version":"6.6.157","lessThanOrEqual":"6.6.*","status":"unaffected","versionType":"semver"},{"version":"6.12.110","lessThanOrEqual":"6.12.*","status":"unaffected","versionType":"semver"},{"version":"6.18.51","lessThanOrEqual":"6.18.*","status":"unaffected","versionType":"semver"},{"version":"7.2.4","lessThanOrEqual":"7.2.*","status":"unaffected","versionType":"semver"},{"version":"7.3-rc1","lessThanOrEqual":"*","status":"unaffected","versionType":"original_commit_for_fix"}]}],"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"5.10.270"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"5.15.221"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"6.1.188"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"6.6.157"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"6.12.110"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"6.18.51"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"4.18","versionEndExcluding":"7.3-rc1"}]}]}],"references":[{"url":"https://git.kernel.org/stable/c/239f26589a6926db28c436e14f28517581ef1385"},{"url":"https://git.kernel.org/stable/c/3b9369881b403f4cdbb11fa998554382bdcc3d8c"},{"url":"https://git.kernel.org/stable/c/3b41d907400cc1dd1da9555b81dca422b1f44433"},{"url":"https://git.kernel.org/stable/c/680f20d5937fa4d1367c59fe83091b78041015f5"},{"url":"https://git.kernel.org/stable/c/bf4aaa7ea2579e24ed7de2e20578a875bebca011"},{"url":"https://git.kernel.org/stable/c/e15407c3a8a005324f633cd46cd8fb58042c1157"},{"url":"https://git.kernel.org/stable/c/6a6d36fadb8537d9b79e72c9fa51885ec0c33e10"},{"url":"https://git.kernel.org/stable/c/403f96c32c9e24600093d7d0c61c17daeedca957"}],"title":"openvswitch: Fix CT limit teardown use-after-free","x_generator":{"engine":"bippy-1.2.0"}}}}