aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatus Fabian <matfabia@cisco.com>2018-03-23 03:42:06 -0700
committerOle Trøan <otroan@employees.org>2018-03-23 12:36:45 +0000
commitae389bc4a10180aa35010725d525fc440da6f67e (patch)
treeaf52feefb54600da270ea11a66e5e5c7b2e078e5
parentcddbcdb6661e8f6a8852f32543828a18397dce64 (diff)
NAT44: fix ICMP checksum update crash (VPP-1205)
Change-Id: I3e4bbfe205c86cb0839dd5c542f083dbe6bea881 Signed-off-by: Matus Fabian <matfabia@cisco.com> (cherry picked from commit 3f2dd30b0bf7cf3d82c720d5065178c1fa628c6b)
-rwxr-xr-xsrc/plugins/nat/in2out.c3
-rwxr-xr-xsrc/plugins/nat/out2in.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/plugins/nat/in2out.c b/src/plugins/nat/in2out.c
index f29e1575e16..b3b205acbda 100755
--- a/src/plugins/nat/in2out.c
+++ b/src/plugins/nat/in2out.c
@@ -727,6 +727,9 @@ static inline u32 icmp_in2out (snat_main_t *sm,
src_address /* changed member */);
ip0->checksum = ip_csum_fold (sum0);
+ if (icmp0->checksum == 0)
+ icmp0->checksum = 0xffff;
+
if (!icmp_is_error_message (icmp0))
{
new_id0 = sm0.port;
diff --git a/src/plugins/nat/out2in.c b/src/plugins/nat/out2in.c
index 97cd2903a9d..397344d769a 100755
--- a/src/plugins/nat/out2in.c
+++ b/src/plugins/nat/out2in.c
@@ -580,6 +580,9 @@ static inline u32 icmp_out2in (snat_main_t *sm,
dst_address /* changed member */);
ip0->checksum = ip_csum_fold (sum0);
+ if (icmp0->checksum == 0)
+ icmp0->checksum = 0xffff;
+
if (!icmp_is_error_message (icmp0))
{
new_id0 = sm0.port;