{"id":40975,"date":"2026-10-19T00:31:43","date_gmt":"2026-10-18T16:31:43","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98503"},"modified":"2026-10-19T00:31:43","modified_gmt":"2026-10-18T16:31:43","slug":"cve-2026-98503","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98503","title":{"rendered":"CVE-2026-98503 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\npacket: use ubuf_info"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>packet: use ubuf_info completion for TX_RING packets<\/p>\n<p>tpacket_snd sends skbs with frags pointing into its ring slots. Slots<br \/>\nare released when skb-&gt;destructor is called.<\/p>\n<p>A call to skb_orphan calls skb-&gt;destructor before the skb is freed.<br \/>\nThis can cause the slot to be reused while still linked into the skb.<\/p>\n<p>Switch to standard zerocopy completion (ubuf_info) so the slot is only<br \/>\nreleased once all references to the payload are freed or copied.<br \/>\nRestore skb-&gt;destructor to standard sock_wfree.<\/p>\n<p>The ubuf_info completion callback can be called with a NULL skb, but<br \/>\nonly from net_zcopy_put and related API, used by zerocopy implementations<br \/>\nthat hold their own reference on the uarg, such as MSG_ZEROCOPY. This<br \/>\nuarg is only ever completed from skb_zcopy_clear, so skb is always set.<\/p>\n<p>To prevent userspace from aliasing in-flight state on shared ring<br \/>\nslots, allocate tpacket_uarg per packet, rather than per slot. This<br \/>\nadds a small allocation to the transmit path. Use standard kmalloc to<br \/>\nallow backporting to stable kernels.<\/p>\n<p>The uarg holds an sk_wmem_alloc reference, rather than an sk_refcnt<br \/>\nreference. packet_free_tx_ring waits on sk_wmem_alloc before freeing<br \/>\nthe ring pages. Always allocate vec-&gt;deferred for tx_ring so page-backed<br \/>\nrings also wait on sk_wmem_alloc when skb_copy_ubufs drops page refs<br \/>\nbefore calling tpacket_ubuf_complete.<\/p>\n<p>Drop the tx_ring.pg_vec test that tpacket_destruct_skb performed before<br \/>\naccessing the slot. The sk_wmem_alloc reference now guarantees that the<br \/>\nslot is valid. The test is also not sufficient by itself, as it reads<br \/>\npg_vec without pg_vec_lock, so it can race with packet_set_ring.<\/p>\n<p>As a result a slot is released when its payload is copied, which can<br \/>\nbe before transmission (e.g., in skb_orphan_frags_rx). If copied<br \/>\nbefore skb_tx_timestamp() is called, no slot timestamp is recorded,<br \/>\nsimilar to when skb_orphan() was called early in the datapath before<br \/>\nthis patch.<\/p>\n<p>Revert the now unused previous skb_zcopy_.._nouarg infra.<\/p>\n<p>Depends on commit 992cc9f94ca9 (&#8220;net\/packet: defer vmalloc TX_RING<br \/>\nfree until skbs finish&#8221;).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>packet: use ubuf_info completion for TX_RING packets<\/p>\n<p>tpacket_snd sends skbs with frags pointing into its ring slots. Slots<br \/>\nare rel<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-40975","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/40975","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=40975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=40975"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=40975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}