ip: fix ip zero checksum verification 23/28623/5
authorBenoît Ganne <bganne@cisco.com>
Mon, 31 Aug 2020 16:59:34 +0000 (18:59 +0200)
committerDamjan Marion <dmarion@me.com>
Tue, 1 Sep 2020 12:03:27 +0000 (12:03 +0000)
commit6e334e3e77bb156a9317a37500077a218a04f7a3
treefa2caf364ba7d99ca7e3895c37bb1047c6be8c0f
parent1d104c5ecdce37301fdfea0e62a533a2e5342ee0
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>
src/plugins/flowprobe/node.c
src/plugins/ioam/udp-ping/udp_ping_export.c
src/plugins/map/ip4_map.c
src/plugins/nat/nat_ipfix_logging.c
src/plugins/ping/ping.c
src/vnet/ip/ip4_format.c
src/vnet/ip/ip4_forward.c
src/vnet/ip/ip4_pg.c
src/vnet/ipfix-export/flow_report_classify.c
src/vnet/ipfix-export/ipfix_doc.md