{"id":33437,"date":"2026-10-06T20:32:00","date_gmt":"2026-10-06T12:32:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98368"},"modified":"2026-10-06T20:32:00","modified_gmt":"2026-10-06T12:32:00","slug":"cve-2026-98368","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98368","title":{"rendered":"CVE-2026-98368 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nesp: downgrade zeroco"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>esp: downgrade zerocopy managed frags before mutating skb frags<\/p>\n<p>On the out-of-place output path (esp-&gt;inplace == false) ESP rewrites the<br \/>\nskb frag array: esp_output_head() appends a trailer frag and<br \/>\nesp_output_tail() replaces the frags with a destination page, both<br \/>\nreferenced with get_page().<\/p>\n<p>When the skb carries zerocopy managed frags (SKBFL_MANAGED_FRAG_REFS) the<br \/>\npayload frags are owned by the ubuf and must not be referenced or<br \/>\nunreferenced individually, but ESP mutates the frag array without ever<br \/>\ndowngrading the skb.  This breaks the managed-frag invariant two ways:<\/p>\n<p>  &#8211; esp_ssg_unref() walks the source scatterlist and drops a page<br \/>\n    reference for every frag, including the ubuf-owned payload frags,<br \/>\n    pushing their refcount below the GUP pin bias while the pages are<br \/>\n    still pinned, i.e. a use-after-free of the zerocopy pages;<\/p>\n<p>  &#8211; esp_output_tail() installs its destination page as frag 0 with<br \/>\n    get_page() but leaves SKBFL_MANAGED_FRAG_REFS set, so<br \/>\n    skb_release_data() takes the skip_unref branch and never drops that<br \/>\n    reference, leaking the x-&gt;xfrag page at packet rate.<\/p>\n<p>Fix this the way every other frag-mutating site does (__ip_append_data(),<br \/>\n__ip6_append_data(), tcp_sendmsg_locked()) and call<br \/>\nskb_zcopy_downgrade_managed() before ESP touches the frag array: it takes<br \/>\na real reference on each existing frag and clears SKBFL_MANAGED_FRAG_REFS,<br \/>\nso the per-frag unref in esp_ssg_unref() and the frag release in<br \/>\nskb_release_data() are both balanced and no mixed-ownership frag array is<br \/>\nleft behind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>esp: downgrade zerocopy managed frags before mutating skb frags<\/p>\n<p>On the out-of-place output path (esp-&gt;inplace == false) ESP rewrit<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-33437","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/33437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=33437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}