{"id":6846,"date":"2026-09-04T18:49:19","date_gmt":"2026-09-04T10:49:19","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72222"},"modified":"2026-09-04T18:49:19","modified_gmt":"2026-09-04T10:49:19","slug":"cve-2026-72222","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72222","title":{"rendered":"CVE-2026-72222 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsunrpc: pin svc_xprt"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunrpc: pin svc_xprt across the asynchronous TLS handshake callback<\/p>\n<p>svc_tcp_handshake() stores the raw svc_xprt pointer in<br \/>\ntls_handshake_args.ta_data and submits the request through<br \/>\ntls_server_hello_x509(). The handshake core takes only<br \/>\nsock_hold(req-&gt;hr_sk); nothing references the embedding struct<br \/>\nsvc_sock that svc_tcp_handshake_done() reaches via container_of().<\/p>\n<p>Two close races leave the in-flight callback writing through a freed<br \/>\nsvc_sock. svc_sock_free() calls tls_handshake_cancel() and discards<br \/>\nits return value: a false return means handshake_complete() has<br \/>\nalready set HANDSHAKE_F_REQ_COMPLETED but hp_done() may not have<br \/>\nfinished, yet svc_sock_free() proceeds to kfree(svsk). The<br \/>\ncancel-loser fall-through inside svc_tcp_handshake() itself produces<br \/>\nthe same window: when wait_for_completion_interruptible_timeout()<br \/>\nreturns sk_handshake_done.<\/p>\n<p>The corruption surfaces as set_bit\/clear_bit RMW into the freed<br \/>\nxpt_flags slab slot and as complete_all() walking and writing the<br \/>\nfreed wait_queue_head_t list embedded in sk_handshake_done &#8212; a<br \/>\nslab-corruption primitive, not a benign read. The path is reachable<br \/>\non any TLS-enabled NFS server whenever a connection close overlaps<br \/>\nthe tlshd downcall delivery window; the interruptible wait means<br \/>\nsignal delivery suffices, not just SVC_HANDSHAKE_TO expiry.<\/p>\n<p>Take svc_xprt_get(xprt) immediately before tls_server_hello_x509()<br \/>\nso the in-flight callback owns its own reference. Release it on the<br \/>\ntwo edges where the callback is guaranteed not to fire &#8212; submission<br \/>\nfailure from tls_server_hello_x509() and a successful<br \/>\ntls_handshake_cancel() &#8212; and at the tail of<br \/>\nsvc_tcp_handshake_done() after complete_all().<\/p>\n<p>[cel: rewrote commit message to describe the actual change]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>sunrpc: pin svc_xprt across the asynchronous TLS handshake callback<\/p>\n<p>svc_tcp_handshake() stores the raw svc_xprt pointer in<br \/>\ntls_han<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6846","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6846","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=6846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}