diff options
author | Benoît Ganne <bganne@cisco.com> | 2020-08-31 18:59:34 +0200 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-09-01 12:03:27 +0000 |
commit | 6e334e3e77bb156a9317a37500077a218a04f7a3 (patch) | |
tree | fa2caf364ba7d99ca7e3895c37bb1047c6be8c0f /src/plugins/ioam/udp-ping | |
parent | 1d104c5ecdce37301fdfea0e62a533a2e5342ee0 (diff) |
ip: fix ip zero checksum verification
In one's complement, there are two representations of zero: the all
zero and the all one bit values, often referred to as +0 and -0. See
RFC 1624 section 3 for more details.
This used to be taken care of in ip4_header_checksum(), but it is no
longer the case. The check ip->checksum == ip4_header_checksum (ip) is
no longer correct in the -0 case.
Always use ip4_header_checksum_is_valid() instead (which behaves
correctly since 9a79a1ab931c3b5a7ae07d6f0fcfef7c4368a2c4).
Type: fix
Fixes: e5f0050c7a5d411f96af6401797529d58825e2af
Change-Id: Iacc6b60645a834287b085aecb9e3fdb4554cf0cf
Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/plugins/ioam/udp-ping')
-rw-r--r-- | src/plugins/ioam/udp-ping/udp_ping_export.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/plugins/ioam/udp-ping/udp_ping_export.c b/src/plugins/ioam/udp-ping/udp_ping_export.c index d25eb1041dd..3c632c86900 100644 --- a/src/plugins/ioam/udp-ping/udp_ping_export.c +++ b/src/plugins/ioam/udp-ping/udp_ping_export.c @@ -152,7 +152,7 @@ udp_ping_send_flows (flow_report_main_t * frm, flow_report_t * fr, if (udp->checksum == 0) udp->checksum = 0xffff; - ASSERT (ip->checksum == ip4_header_checksum (ip)); + ASSERT (ip4_header_checksum_is_valid (ip)); to_next[0] = bi0; f->n_vectors++; @@ -203,7 +203,7 @@ udp_ping_send_flows (flow_report_main_t * frm, flow_report_t * fr, if (udp->checksum == 0) udp->checksum = 0xffff; - ASSERT (ip->checksum == ip4_header_checksum (ip)); + ASSERT (ip4_header_checksum_is_valid (ip)); to_next[0] = bi0; f->n_vectors++; |