{"id":30388,"date":"2026-09-29T08:31:02","date_gmt":"2026-09-29T00:31:02","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-18417"},"modified":"2026-09-29T08:31:02","modified_gmt":"2026-09-29T00:31:02","slug":"cve-2026-18417","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-18417","title":{"rendered":"CVE-2026-18417 [MEDIUM] &#8211; The native BSD-socket layer recorded a pending asynchronous socket error by type-punning i"},"content":{"rendered":"<p>The native BSD-socket layer recorded a pending asynchronous socket error by type-punning it into struct net_context&#8217;s void user_data field (ctx-&gt;user_data = INT_TO_POINTER(-status) in zsock_accepted_cb(), zsock_received_cb(), zsock_connected_cb() and zsock_close_ctx() in subsys\/net\/lib\/sockets\/sockets_inet.c), reading it back with POINTER_TO_INT(). That same field is owned by the network stack for listening TCP contexts: net_tcp_accept() stores the parent context pointer there and the TCP core passes it back to the registered accept callback. A failed accept therefore left a small integer (an errno value) where the stack expected a struct net_context .<\/p>\n<p>When the network interface carrying a listening TCP socket goes down, close_tcp_conn() in subsys\/net\/ip\/tcp.c invokes the accept callback with -ENETDOWN and the context&#8217;s user_data. In v4.3.0 the callback was not disarmed afterwards, so a second interface-down event forwarded the previously stored errno to zsock_accepted_cb(), which dereferenced it as the parent context and performed several stores through it (sock_set_error()&#8217;s read-modify-write of socket_data, k_fifo_cancel_wait(&amp;parent-&gt;recv_q)) \u2014 the crash described in the fix&#8217;s commit message. v4.3.1 and v4.4.x carry a later change clearing conn-&gt;accept_cb after the error callback (269cb8823d3 on the v4.3 branch, 913fae5169425550f2364655298fceb79b320066 on main), which closes that repeat path; on those releases the poisoned cookie remains reachable only by a narrower race, a handshake completing alongside the interface-down still passing the stale cookie to k_fifo_put(&amp;parent-&gt;accept_q, &#8230;), and by getsockopt(SO_ERROR), which reads the field back unconditionally.<\/p>\n<p>On v4.3.0 an application that keeps a listening TCP socket open across repeated link-down events is sufficient to reach the defect; the triggering condition is a network-interface state change, not attacker-supplied packet data, so the practical attacker is one able to force the link down repeatedly (for example an adjacent attacker disrupting a wireless link) or one with local\/physical access. Because both the faulting address and the stored data are fixed small constants derived from the errno value, the outcome is a wild-pointer access leading to a kernel fatal error \u2014 a denial of service (device crash or reset) rather than an attacker-directed memory corruption.<\/p>\n<p>The fix stores the pending error in a dedicated net_context.sock_error field and converts every producer and consumer to sock_set_error()\/sock_get_error(), leaving user_data untouched. As a side effect it also stops getsockopt(SO_ERROR) \u2014 which is evaluated unconditionally \u2014 from returning the kernel address held in user_data to a userspace application.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The native BSD-socket layer recorded a pending asynchronous socket error by type-punning it into struct net_context&#8217;s void user_data field (ctx-&gt;user_data = INT_TO_POINTER(-status) in zsock_accepted_c<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-30388","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/30388","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=30388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}