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.
This commit is contained in:
Gunnar Beutner 2021-06-03 19:04:41 +02:00 committed by Andreas Kling
parent c4c577b2bf
commit 7f7897c900
Notes: sideshowbarker 2024-07-18 16:56:43 +09:00

View file

@ -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);