Summary: | traceroute6 generates wrong UDP checksum | ||
---|---|---|---|
Product: | Base System | Reporter: | Zhenlei Huang <zlei> |
Component: | bin | Assignee: | freebsd-net (Nobody) <net> |
Status: | Closed FIXED | ||
Severity: | Affects Some People | CC: | emaste, markj, zarychtam |
Priority: | --- | Keywords: | regression |
Version: | 13.0-STABLE | ||
Hardware: | Any | ||
OS: | Any | ||
URL: | https://reviews.freebsd.org/D30042 | ||
See Also: | https://reviews.freebsd.org/D25604 |
Description
Zhenlei Huang
2021-04-30 08:31:29 UTC
I can confirm the regression was introduced in review D25604 . Proposed patch https://reviews.freebsd.org/D30042 A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=1d712c05370dca8cbf81d1ecd9acd606fdcacaf4 commit 1d712c05370dca8cbf81d1ecd9acd606fdcacaf4 Author: Zhenlei Huang <zlei.huang@gmail.com> AuthorDate: 2021-05-03 16:46:19 +0000 Commit: Mark Johnston <markj@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(+) A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=e183dd501caf03751c96c7c0683ccc3a6c0cd27d commit e183dd501caf03751c96c7c0683ccc3a6c0cd27d Author: Zhenlei Huang <zlei.huang@gmail.com> AuthorDate: 2021-05-03 16:46:19 +0000 Commit: Mark Johnston <markj@FreeBSD.org> CommitDate: 2021-05-06 12:59:19 +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 Differential Revision: https://reviews.freebsd.org/D30042 (cherry picked from commit 1d712c05370dca8cbf81d1ecd9acd606fdcacaf4) usr.sbin/traceroute6/traceroute6.c | 1 + 1 file changed, 1 insertion(+) Thanks for the report and patch. |