{"id":41053,"date":"2026-10-19T00:31:57","date_gmt":"2026-10-18T16:31:57","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98581"},"modified":"2026-10-19T00:31:57","modified_gmt":"2026-10-18T16:31:57","slug":"cve-2026-98581","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98581","title":{"rendered":"CVE-2026-98581 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfc: llcp: Fix list c"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfc: llcp: Fix list corruption \/ refcount desync in nfc_llcp_recv_dm()<\/p>\n<p>nfc_llcp_recv_dm() handles DM(NOBOUND)\/DM(REJ) for a socket that is still<br \/>\nlinked on local-&gt;connecting_sockets: it looks the socket up with<br \/>\nnfc_llcp_connecting_sock_get(), sets sk-&gt;sk_state = LLCP_CLOSED and<br \/>\nreturns, without taking the socket lock and without unlinking the socket<br \/>\nfrom the connecting_sockets list.<\/p>\n<p>llcp_sock_release() selects the list to unlink from by sk_state: a socket<br \/>\nin LLCP_CONNECTING is unlinked from connecting_sockets, otherwise from the<br \/>\nsockets list.  Because recv_dm left the socket physically on<br \/>\nconnecting_sockets but in the LLCP_CLOSED state, release() takes the else<br \/>\nbranch and calls nfc_llcp_sock_unlink(&amp;local-&gt;sockets, sk).  That runs<br \/>\nsk_del_node_init() while holding sockets.lock, i.e. it removes the socket<br \/>\nfrom the connecting_sockets hlist under the wrong lock.  A concurrent<br \/>\nconnect() linking another socket onto connecting_sockets under<br \/>\nconnecting_sockets.lock then mutates the same hlist unserialized, which<br \/>\ncorrupts the list and desyncs the sk_add_node()\/sk_del_node_init()<br \/>\nsock_hold()\/__sock_put() pairing.  An unprivileged local process holding<br \/>\nLLCP sockets, with the DM supplied by the remote peer over an established<br \/>\nLLCP link, can drive this to leak kernel sockets without bound (the<br \/>\nmis-decrement goes through the non-freeing __sock_put() path, so the<br \/>\nobject is never released), leading to memory exhaustion \/ DoS.<\/p>\n<p>This is the same class of bug that was fixed in the sibling handler<br \/>\nnfc_llcp_recv_cc() by commit b493ea2765cc (&#8220;nfc: llcp: Fix use-after-free<br \/>\nrace in nfc_llcp_recv_cc()&#8221;); recv_dm did not receive the equivalent fix.<\/p>\n<p>Fix it the same way: take lock_sock(), re-check that the socket is still<br \/>\nhashed (release() may have won the race), and for the NOBOUND\/REJ case<br \/>\nunlink it from connecting_sockets before moving it to LLCP_CLOSED.  The<br \/>\nunlink drops the connecting_sockets membership reference via<br \/>\nsk_del_node_init(), leaving the socket unhashed, so the later<br \/>\nnfc_llcp_sock_unlink() in llcp_sock_release() becomes a no-op and no<br \/>\ndouble put occurs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfc: llcp: Fix list corruption \/ refcount desync in nfc_llcp_recv_dm()<\/p>\n<p>nfc_llcp_recv_dm() handles DM(NOBOUND)\/DM(REJ) for a socket<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41053","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41053","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=41053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}