{"id":"CVE-2026-80977","state":"PUBLISHED","title":"net: skbuff: don't touch shared zerocopy state in skb_tx_error()","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: skbuff: don't touch shared zerocopy state in skb_tx_error()\n\nskb_tx_error() completes the zerocopy uarg and clears\nSKBFL_ALL_ZEROCOPY, and skb_zcopy_downgrade_managed() clears\nSKBFL_MANAGED_FRAG_REFS. Both live in skb_shinfo(), which every clone\nshares, while the caller only owns the reference it is about to drop.\nThrough a clone it tells the producer its pages are free and drops\nSKBFL_SHARED_FRAG for an skb that is still in flight.\n\nOpen vSwitch reaches this with a non-last OVS_ACTION_ATTR_RECIRC:\nclone_execute() sends a skb_clone() into ovs_dp_process_packet() while\ndo_execute_actions() keeps forwarding the original, and skb_clone()\ndoes not privatise the frags here -- skb_orphan_frags() returns early\non SKBFL_DONT_ORPHAN. A flow miss on the clone then strips the marker\nfrom the packet still being forwarded, and a later local ESP delivery\ndecrypts in place over frags it does not own privately.\n\nSkip it for a cloned skb. Nothing is lost: skb_release_data() clears\nthe zerocopy state once the last reference to the shared data goes.","publishedAt":"2026-09-11T19:42:38.862Z","updatedAt":"2026-10-19T08:46:01.788Z","severity":{"score":7.8,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"6493165034bca14033bf49c9cec7b45e97a91497","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"b4452349dcf4d561e13be768d5d278de58248930","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"363c4252ffc473a0203e91b83ede5519dfb8bd07","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"6ec22afc82a3cae07ade0a6ec361ae2532128ff5","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"15aa81b390d401abf4b8211042470e9e92e3b7fb","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"288f9970670841044ab030104fa6b6ed159949d0","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"0370da114a9bc044e248b85c6809d1b5e0c1f7f9","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"f66bdb1cc0fcd227a062378f8be0b5873aa5600a","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/skbuff.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"3.8","status":"affected"},{"version":"0","status":"unaffected","lessThan":"3.8","versionType":"semver"},{"version":"5.10.270","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.221","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.188","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.157","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.109","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/skbuff.c"]}],"references":["https://git.kernel.org/stable/c/6493165034bca14033bf49c9cec7b45e97a91497","https://git.kernel.org/stable/c/b4452349dcf4d561e13be768d5d278de58248930","https://git.kernel.org/stable/c/363c4252ffc473a0203e91b83ede5519dfb8bd07","https://git.kernel.org/stable/c/6ec22afc82a3cae07ade0a6ec361ae2532128ff5","https://git.kernel.org/stable/c/15aa81b390d401abf4b8211042470e9e92e3b7fb","https://git.kernel.org/stable/c/288f9970670841044ab030104fa6b6ed159949d0","https://git.kernel.org/stable/c/0370da114a9bc044e248b85c6809d1b5e0c1f7f9","https://git.kernel.org/stable/c/f66bdb1cc0fcd227a062378f8be0b5873aa5600a"],"weaknesses":[],"ingestedAt":"2026-10-29T20:13:07.220Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/80xxx/CVE-2026-80977.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-80977","state":"PUBLISHED","datePublished":"2026-09-11T19:42:38.862Z","dateUpdated":"2026-10-19T08:46:01.788Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-08-26T14:34:25.811Z"},"containers":{"cna":{"title":"net: skbuff: don't touch shared zerocopy state in skb_tx_error()","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: skbuff: don't touch shared zerocopy state in skb_tx_error()\n\nskb_tx_error() completes the zerocopy uarg and clears\nSKBFL_ALL_ZEROCOPY, and skb_zcopy_downgrade_managed() clears\nSKBFL_MANAGED_FRAG_REFS. Both live in skb_shinfo(), which every clone\nshares, while the caller only owns the reference it is about to drop.\nThrough a clone it tells the producer its pages are free and drops\nSKBFL_SHARED_FRAG for an skb that is still in flight.\n\nOpen vSwitch reaches this with a non-last OVS_ACTION_ATTR_RECIRC:\nclone_execute() sends a skb_clone() into ovs_dp_process_packet() while\ndo_execute_actions() keeps forwarding the original, and skb_clone()\ndoes not privatise the frags here -- skb_orphan_frags() returns early\non SKBFL_DONT_ORPHAN. A flow miss on the clone then strips the marker\nfrom the packet still being forwarded, and a later local ESP delivery\ndecrypts in place over frags it does not own privately.\n\nSkip it for a cloned skb. Nothing is lost: skb_release_data() clears\nthe zerocopy state once the last reference to the shared data goes."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"6493165034bca14033bf49c9cec7b45e97a91497","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"b4452349dcf4d561e13be768d5d278de58248930","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"363c4252ffc473a0203e91b83ede5519dfb8bd07","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"6ec22afc82a3cae07ade0a6ec361ae2532128ff5","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"15aa81b390d401abf4b8211042470e9e92e3b7fb","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"288f9970670841044ab030104fa6b6ed159949d0","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"0370da114a9bc044e248b85c6809d1b5e0c1f7f9","versionType":"git"},{"version":"25121173f7b1e4ac3fc692df6e7b8c52ec36abba","status":"affected","lessThan":"f66bdb1cc0fcd227a062378f8be0b5873aa5600a","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/skbuff.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"3.8","status":"affected"},{"version":"0","status":"unaffected","lessThan":"3.8","versionType":"semver"},{"version":"5.10.270","status":"unaffected","lessThanOrEqual":"5.10.*","versionType":"semver"},{"version":"5.15.221","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.188","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.157","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.109","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.50","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"7.2.4","status":"unaffected","lessThanOrEqual":"7.2.*","versionType":"semver"},{"version":"7.3","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["net/core/skbuff.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/6493165034bca14033bf49c9cec7b45e97a91497"},{"url":"https://git.kernel.org/stable/c/b4452349dcf4d561e13be768d5d278de58248930"},{"url":"https://git.kernel.org/stable/c/363c4252ffc473a0203e91b83ede5519dfb8bd07"},{"url":"https://git.kernel.org/stable/c/6ec22afc82a3cae07ade0a6ec361ae2532128ff5"},{"url":"https://git.kernel.org/stable/c/15aa81b390d401abf4b8211042470e9e92e3b7fb"},{"url":"https://git.kernel.org/stable/c/288f9970670841044ab030104fa6b6ed159949d0"},{"url":"https://git.kernel.org/stable/c/0370da114a9bc044e248b85c6809d1b5e0c1f7f9"},{"url":"https://git.kernel.org/stable/c/f66bdb1cc0fcd227a062378f8be0b5873aa5600a"}],"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 buggy state is a locally originated MSG_ZEROCOPY/io_uring TX skb (SKBFL_DONT_ORPHAN plus a uarg); NIC-received packets never carry that marker, and the skb must still be forwarded into local ESP, so a local account is required.\nAC:L - The attacker fully controls both sides: OVS flows with a non-last RECIRC, a guaranteed miss/upcall failure on the clone, MSG_ZEROCOPY send, and the ESP SA/payload, so the shared-shinfo strip and in-place decrypt are reliably reproducible with no race beyond attacker influence.\nPR:L - An unprivileged user can enable SO_ZEROCOPY and, via unshare -Urn, obtain CAP_NET_ADMIN in a user+net namespace; OVS genetlink uses GENL_UNS_ADMIN_PERM and XFRM SAs are likewise namespace-installable, while the global page cache remains the corruption target.\nUI:N - The attacker installs the OVS recirc flow, sends the MSG_ZEROCOPY packet, and completes local ESP delivery without any victim action.\nS:U - The resulting page-cache write and premature zerocopy completion stay inside the host kernel's memory authority as a standard local memory-corruption/LPE primitive and do not cross a VM or IOMMU boundary.\nC:H - skb_tx_error() on the clone completes the shared uarg and clears SKBFL_SHARED_FRAG, so later in-place ESP decrypt (and UAF of still-mapped pages) corrupts globally cached file/code pages and can be leveraged for arbitrary disclosure.\nI:H - With the shared-frag marker stripped, esp_input() skips skb_cow_data() and AEAD-decrypts attacker-controlled plaintext in place over page-cache-backed frags, yielding an unprivileged write into files the sender could only read (the Fragnesia primitive).\nA:H - Use-after-free of zerocopy pages still referenced by the in-flight original skb, plus overwriting page-cache-backed executable or kernel-managed data, causes oopses, panics, and process crashes."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-10-19T08:46:01.788Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"5.10.270"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"5.15.221"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"6.1.188"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"6.6.157"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"6.12.109"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"6.18.50"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"7.2.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"3.8","versionEndExcluding":"7.3"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2026-80977","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"version":"2.0.3","timestamp":"2026-10-16T19:21:39.834701Z"}}}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-16T19:26:37.069Z"}}]}}}