diff --git a/kernel/include/kernel/Networking/NetworkLayer.h b/kernel/include/kernel/Networking/NetworkLayer.h index 7d11a21bb..7f970f51c 100644 --- a/kernel/include/kernel/Networking/NetworkLayer.h +++ b/kernel/include/kernel/Networking/NetworkLayer.h @@ -38,6 +38,8 @@ namespace Kernel checksum += BAN::host_to_network_endian(reinterpret_cast(&pseudo_header)[i]); for (size_t i = 0; i < packet.size() / sizeof(uint16_t); i++) checksum += BAN::host_to_network_endian(reinterpret_cast(packet.data())[i]); + if (packet.size() % 2) + checksum += (uint16_t)packet[packet.size() - 1] << 8; while (checksum >> 16) checksum = (checksum >> 16) + (checksum & 0xFFFF); return ~(uint16_t)checksum;