From d69e89f5cbdb1df2de67adf680c0170c493d095d Mon Sep 17 00:00:00 2001 From: Martin Stein Date: Sat, 16 Jul 2022 11:04:56 +0200 Subject: [PATCH] internet checksum: use signed long for accumulator We used to use 'unsigned long' for the accumulating variable when calculating internet checksums. However, 'signed long' is more in accordance with RFC 1071 and will allow us to share the same back end for folding, once we implement incremental updating of internet checksums. Ref #4555 --- repos/os/src/lib/net/internet_checksum.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/repos/os/src/lib/net/internet_checksum.cc b/repos/os/src/lib/net/internet_checksum.cc index 3179560292..9628fd6607 100644 --- a/repos/os/src/lib/net/internet_checksum.cc +++ b/repos/os/src/lib/net/internet_checksum.cc @@ -31,7 +31,7 @@ struct Packed_uint8 static uint16_t checksum_of_raw_data(Packed_uint16 const *data_ptr, size_t data_sz, - addr_t sum) + signed long sum) { /* add up bytes in pairs */ for (; data_sz > 1; data_sz -= sizeof(Packed_uint16)) { @@ -77,7 +77,7 @@ uint16_t Net::internet_checksum_pseudo_ip(Packed_uint16 const *data_ptr, * | 4 bytes | 4 bytes | 1 byte | 1 byte | 2 bytes | * -------------------------------------------------------------- */ - addr_t sum = host_to_big_endian((uint16_t)ip_prot) + ip_data_sz_be; + signed long sum { host_to_big_endian((uint16_t)ip_prot) + ip_data_sz_be }; for (size_t i = 0; i < Ipv4_packet::ADDR_LEN; i += 2) sum += *(uint16_t*)&ip_src.addr[i] + *(uint16_t*)&ip_dst.addr[i];