From d452cf4170212ab912ee19e2179d1b0a70fac189 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Fri, 9 Feb 2024 01:20:40 +0200 Subject: [PATCH] Kernel: Fix checksum for packets with odd number of bytes --- kernel/include/kernel/Networking/NetworkLayer.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/include/kernel/Networking/NetworkLayer.h b/kernel/include/kernel/Networking/NetworkLayer.h index 7d11a21b..7f970f51 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;