{"id":14991,"date":"2026-09-04T19:02:21","date_gmt":"2026-09-04T11:02:21","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63979"},"modified":"2026-09-04T19:02:21","modified_gmt":"2026-09-04T11:02:21","slug":"cve-2026-63979","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-63979","title":{"rendered":"CVE-2026-63979 [CRITICAL] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet\/handshake: hand o"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/handshake: hand off the pinned file reference to accept_doit<\/p>\n<p>handshake_req_next() removes the request from the per-net<br \/>\npending list and drops hn_lock before handshake_nl_accept_doit()<br \/>\nreads req-&gt;hr_sk-&gt;sk_socket and dereferences sock-&gt;file (once in<br \/>\nFD_PREPARE() and again in get_file()).  In that window a<br \/>\nconsumer running tls_handshake_cancel() followed by sockfd_put()<br \/>\n(svc_sock_free) or __fput_sync() (xs_reset_transport) releases<br \/>\nsock-&gt;file.  sock_release() then runs sock_orphan(), zeroing<br \/>\nsk_socket, and frees the struct socket.  The accept-side code<br \/>\neither reads NULL through sk_socket or chases freed memory.<\/p>\n<p>The submit-side sock_hold() does not prevent this.  sk_refcnt<br \/>\nprotects struct sock, but struct socket and sock-&gt;file are<br \/>\nindependently refcounted via the file descriptor the consumer<br \/>\nowns.  Pinning sk leaves sock and sock-&gt;file unprotected.<\/p>\n<p>Retarget the accept-side dereferences at req-&gt;hr_file, which was<br \/>\npinned at submit time, instead of req-&gt;hr_sk-&gt;sk_socket-&gt;file.<br \/>\nPinning on its own is not sufficient: a consumer that cancels<br \/>\nbetween handshake_req_next() returning and accept_doit reaching<br \/>\nFD_PREPARE() takes the !remove_pending() branch in<br \/>\nhandshake_req_cancel() and drops hr_file before the accept side<br \/>\ntakes its own reference.  Hand off an additional file reference<br \/>\ninside handshake_req_next(), under hn_lock, so the accept side<br \/>\noperates on a reference that no concurrent handshake_req_cancel()<br \/>\ncan revoke.  FD_PREPARE() consumes that handed-off reference,<br \/>\neither by transferring it to the new fd in fd_publish() or by<br \/>\ndropping it in the cleanup destructor on error; the explicit<br \/>\nget_file() that previously balanced FD_PREPARE() is therefore<br \/>\nredundant and goes away.<\/p>\n<p>Update handshake_req_cancel_test2 and _test3 to simulate the<br \/>\nFD_PREPARE() consumption with an fput() so the kunit file-count<br \/>\nassertions stay balanced.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/handshake: hand off the pinned file reference to accept_doit<\/p>\n<p>handshake_req_next() removes the request from the per-net<br \/>\npending<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-14991","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/14991","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=14991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=14991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=14991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}