From 532db9f76881b574924b7fb26772cc911e343a5a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 12 May 2021 12:14:03 +0200 Subject: [PATCH] Kernel: Treat 0.0.0.0 as a loopback address This matches what other operating systems like Linux do: $ ip route get 0.0.0.0 local 0.0.0.0 dev lo src 127.0.0.1 uid 1000 cache $ ssh 0.0.0.0 gunnar@0.0.0.0's password: $ ss -na | grep :22 | grep ESTAB tcp ESTAB 0 0 127.0.0.1:43118 127.0.0.1:22 tcp ESTAB 0 0 127.0.0.1:22 127.0.0.1:43118 --- Kernel/Net/IPv4Socket.cpp | 2 ++ Kernel/Net/NetworkAdapter.cpp | 2 ++ Kernel/Net/Routing.cpp | 2 ++ 3 files changed, 6 insertions(+) diff --git a/Kernel/Net/IPv4Socket.cpp b/Kernel/Net/IPv4Socket.cpp index 62fd5cec4d..ad039cd4e7 100644 --- a/Kernel/Net/IPv4Socket.cpp +++ b/Kernel/Net/IPv4Socket.cpp @@ -139,6 +139,8 @@ KResult IPv4Socket::connect(FileDescription& description, Userspace NetworkAdapter::from_ipv4_address(const IPv4Address& addr if (adapter->ipv4_address() == address || adapter->ipv4_broadcast() == address) return adapter; } + if (address[0] == 0 && address[1] == 0 && address[2] == 0 && address[3] == 0) + return LoopbackAdapter::the(); if (address[0] == 127) return LoopbackAdapter::the(); return nullptr; diff --git a/Kernel/Net/Routing.cpp b/Kernel/Net/Routing.cpp index e207cd35f4..3c6a6d0aac 100644 --- a/Kernel/Net/Routing.cpp +++ b/Kernel/Net/Routing.cpp @@ -141,6 +141,8 @@ RoutingDecision route_to(const IPv4Address& target, const IPv4Address& source, c return { adapter, mac }; }; + if (target[0] == 0 && target[1] == 0 && target[2] == 0 && target[3] == 0) + return if_matches(LoopbackAdapter::the(), LoopbackAdapter::the().mac_address()); if (target[0] == 127) return if_matches(LoopbackAdapter::the(), LoopbackAdapter::the().mac_address());