{"id":17341,"date":"2026-09-05T02:31:00","date_gmt":"2026-09-04T18:31:00","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80837"},"modified":"2026-09-05T02:31:00","modified_gmt":"2026-09-04T18:31:00","slug":"cve-2026-80837","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-80837","title":{"rendered":"CVE-2026-80837 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnetfilter: nf_tables:"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>netfilter: nf_tables: don&#8217;t queue packet path object notifications<\/p>\n<p>All file:line references below are against v7.2-rc4 (ac5b0e5651b1). The<br \/>\ntrace was captured on 7.2.0-rc6-kasan72rc6 (075b74841bd0), where the same<br \/>\nlines apply.<\/p>\n<p>nft_obj_notify() is exported and reached from the packet path. Its only<br \/>\nin-tree caller is nft_quota_obj_eval() (net\/netfilter\/nft_quota.c:68),<br \/>\nwhich notifies with GFP_ATOMIC while evaluating a rule for a transiting<br \/>\npacket, holding no mutex.<\/p>\n<p>Since commit 67cc570edaa0 (&#8220;netfilter: nf_tables: coalesce multiple<br \/>\nnotifications into one skbuff&#8221;) that notification is no longer sent<br \/>\nimmediately. __nft_obj_notify() queues it onto nft_net-&gt;notify_list via<br \/>\nnft_notify_enqueue() (net\/netfilter\/nf_tables_api.c:1211), which is a bare<br \/>\nlist_add_tail(). notify_list has no lock of its own<br \/>\n(include\/net\/netfilter\/nf_tables.h:1951), it is serialised by commit_mutex:<br \/>\nthe six other enqueue sites all run inside a netlink transaction, and the<br \/>\ndrain in nft_commit_notify() (net\/netfilter\/nf_tables_api.c:10746) does<br \/>\nlist_del() + kfree_skb() from nf_tables_commit() with commit_mutex held.<\/p>\n<p>Sending packets through a chain that references a depleted quota object<br \/>\ntherefore races an unlocked list_add_tail() against list_del() +<br \/>\nkfree_skb() on another CPU. The WRITE_ONCE(prev-&gt;next, new) in __list_add()<br \/>\nthen stores through an sk_buff that has already been freed:<\/p>\n<p>  BUG: KASAN: slab-use-after-free in __nft_obj_notify+0x2c5\/0x2d0<br \/>\n  Write of size 8 at addr ff110001047183c0 by task poc\/76<br \/>\n  CPU: 0 UID: 1000 PID: 76 Comm: poc Tainted: G  W  7.2.0-rc6-kasan72rc6 #4<br \/>\n  Call Trace:<\/p>\n<p>   __nft_obj_notify (include\/linux\/list.h:164 include\/linux\/list.h:191<br \/>\n                     net\/netfilter\/nf_tables_api.c:1211<br \/>\n                     net\/netfilter\/nf_tables_api.c:8743)<br \/>\n   nft_quota_obj_eval (net\/netfilter\/nft_quota.c:68)<br \/>\n   nft_do_chain_inet<br \/>\n   nf_hook_slow<br \/>\n   __ip_local_out<br \/>\n   ip_push_pending_frames<br \/>\n   udp_send_skb<br \/>\n   udp_sendmsg<br \/>\n   __x64_sys_sendto<\/p>\n<p>  Allocated by task 77:<br \/>\n   __alloc_skb (net\/core\/skbuff.c:704)<br \/>\n   __nft_obj_notify (include\/net\/netlink.h:1055<br \/>\n                     net\/netfilter\/nf_tables_api.c:8731)<br \/>\n   nft_quota_obj_eval (net\/netfilter\/nft_quota.c:68)<br \/>\n   nft_do_chain<\/p>\n<p>  Freed by task 79:<br \/>\n   nf_tables_commit (include\/linux\/skbuff.h:1332<br \/>\n                     net\/netfilter\/nf_tables_api.c:10759<br \/>\n                     net\/netfilter\/nf_tables_api.c:11185)<br \/>\n   nfnetlink_rcv_batch (net\/netfilter\/nfnetlink.c:574)<br \/>\n   netlink_unicast<br \/>\n   netlink_sendmsg<\/p>\n<p>  The buggy address belongs to the cache skbuff_head_cache of size 232<\/p>\n<p>Queueing from the packet path is wrong even leaving the race aside:<br \/>\nnotify_list is only drained by nft_commit_notify() from nf_tables_commit()<br \/>\n(:11185), so a notification enqueued outside a transaction is not sent<br \/>\nuntil some later netlink batch commits, if one ever does.<\/p>\n<p>The gfp argument that nft_obj_notify() still takes is a leftover of the<br \/>\npre-67cc570edaa0 behaviour, where this path called nfnetlink_send()<br \/>\ndirectly. Restore that: split the message construction out into<br \/>\nnft_obj_notify_alloc() and let each caller decide what to do with the skb.<br \/>\nnft_obj_notify(), the exported one reached from the packet path, sends it<br \/>\nstraight away; nf_tables_obj_notify(), which runs under commit_mutex, keeps<br \/>\nqueueing it, so transaction notifications are still coalesced.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>netfilter: nf_tables: don&#8217;t queue packet path object notifications<\/p>\n<p>All file:line references below are against v7.2-rc4 (ac5b0e5651<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-17341","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/17341","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=17341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}