aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenlei Huang <zlei.huang@gmail.com>2021-05-03 16:46:19 +0000
committerMark Johnston <markj@FreeBSD.org>2021-05-03 17:24:30 +0000
commit1d712c05370dca8cbf81d1ecd9acd606fdcacaf4 (patch)
treeb4df184e00c4e666e6749ea10b4b91d23d6cf6bf
parent243b324f96686642177c8479c03288e2a6f68b50 (diff)
downloadsrc-1d712c05370dca8cbf81d1ecd9acd606fdcacaf4.tar.gz
src-1d712c05370dca8cbf81d1ecd9acd606fdcacaf4.zip
traceroute6: Properly calculate UDP checksum
The revision D25604 capsicumize traceroute6. For UDP the send socket was changed from SOCK_DGRAM to SOCK_RAW and thus the UDP checksum need be calculated by application itself other than the kernel. outpacket is filled with zeros by line 707, thus the first round the UDP checksum is correct. But subsequent rounds outudp->uh_sum will be left with garbage. PR: 255507 Reviewed by: ae, markj, tuexen MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D30042
-rw-r--r--usr.sbin/traceroute6/traceroute6.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/usr.sbin/traceroute6/traceroute6.c b/usr.sbin/traceroute6/traceroute6.c
index 8449a9861302..a071c084ad07 100644
--- a/usr.sbin/traceroute6/traceroute6.c
+++ b/usr.sbin/traceroute6/traceroute6.c
@@ -1118,6 +1118,7 @@ send_probe(int seq, u_long hops)
outudp->uh_sport = htons(ident);
outudp->uh_dport = htons(port+seq);
outudp->uh_ulen = htons(datalen);
+ outudp->uh_sum = 0;
outudp->uh_sum = udp_cksum(&Src, &Dst, outpacket, datalen);
break;
case IPPROTO_NONE: