git: 1d712c05370d - main - traceroute6: Properly calculate UDP checksum
Mark Johnston
markj at FreeBSD.org
Mon May 3 17:55:43 UTC 2021
The branch main has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=1d712c05370dca8cbf81d1ecd9acd606fdcacaf4
commit 1d712c05370dca8cbf81d1ecd9acd606fdcacaf4
Author: Zhenlei Huang <zlei.huang at gmail.com>
AuthorDate: 2021-05-03 16:46:19 +0000
Commit: Mark Johnston <markj at FreeBSD.org>
CommitDate: 2021-05-03 17:24:30 +0000
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
---
usr.sbin/traceroute6/traceroute6.c | 1 +
1 file changed, 1 insertion(+)
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:
More information about the dev-commits-src-main
mailing list