From 0625342382e712a99a83003e828d8ef19f580bf6 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 5 Jun 2021 13:03:06 +0200 Subject: [PATCH] Kernel: Return EPIPE when trying to write to an unconnected socket When attempting to write to a socket that is not connected or - for connection-less protocols - doesn't have a peer address set we should return EPIPE instead of blocking the thread. --- Kernel/Net/IPv4Socket.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp index 54326ce9a2..260c878e22 100644 --- a/Kernel/Net/IPv4Socket.cpp +++ b/Kernel/Net/IPv4Socket.cpp @@ -170,7 +170,7 @@ bool IPv4Socket::can_read(const FileDescription&, size_t) const bool IPv4Socket::can_write(const FileDescription&, size_t) const { - return is_connected(); + return true; } PortAllocationResult IPv4Socket::allocate_local_port_if_needed() @@ -206,6 +206,9 @@ KResultOr IPv4Socket::sendto(FileDescription&, const UserOrKernelBuffer& m_peer_port = ntohs(ia.sin_port); } + if (!is_connected() && m_peer_address.is_zero()) + return EPIPE; + auto routing_decision = route_to(m_peer_address, m_local_address, bound_interface()); if (routing_decision.is_zero()) return EHOSTUNREACH;