From 7f7897c90012f0db09f6f88fb2ba597aeaa68902 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Thu, 3 Jun 2021 19:04:41 +0200 Subject: [PATCH] Kernel: Make sure outgoing ICMP packets have the correct checksum The internet_checksum() function relies on the buffer - or at least the checksum field - to be all zeroes. --- Kernel/Net/NetworkTask.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Kernel/Net/NetworkTask.cpp b/Kernel/Net/NetworkTask.cpp index f7f54061cf..f92f50c375 100644 --- a/Kernel/Net/NetworkTask.cpp +++ b/Kernel/Net/NetworkTask.cpp @@ -253,6 +253,7 @@ void handle_icmp(const EthernetFrameHeader& eth, const IPv4Packet& ipv4_packet, return; } adapter->fill_in_ipv4_header(*packet, adapter->ipv4_address(), eth.source(), ipv4_packet.source(), IPv4Protocol::ICMP, icmp_packet_size, 64); + memset(packet->buffer.data() + ipv4_payload_offset, 0, sizeof(ICMPEchoPacket)); auto& response = *(ICMPEchoPacket*)(packet->buffer.data() + ipv4_payload_offset); response.header.set_type(ICMPType::EchoReply); response.header.set_code(0);