From 0382176581b7b1bc32fe0c329df82879bf3784a5 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 29 Jan 2024 16:05:11 -0500 Subject: [PATCH] IPv4: Overall MTU is 65535 (0xFFFF). If the route supports a greater MTU, we need to clamp it. The loopback reports an MTU greater by one byte (65536), and if we don't clamp it here, TCP will try to send packets actually that large (and fail.) --- src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index 44f0bf00bf..d7db63df29 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -1698,6 +1698,10 @@ ipv4_get_mtu(net_protocol* protocol, const struct sockaddr* address) mtu = route->interface_address->interface->device->mtu; sDatalinkModule->put_route(sDomain, route); + + if (mtu > 0xffff) + mtu = 0xffff; + return mtu - sizeof(ipv4_header); }