git: fab0a83ff748 - stable/14 - tcp: fix checksum calculation bug
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 21 Jan 2026 12:48:47 UTC
The branch stable/14 has been updated by tuexen:
URL: https://cgit.FreeBSD.org/src/commit/?id=fab0a83ff7484a069f04ec9c6b5657ec9676c7dd
commit fab0a83ff7484a069f04ec9c6b5657ec9676c7dd
Author: Timo Völker <timo.voelker@fh-muenster.de>
AuthorDate: 2025-12-19 16:50:20 +0000
Commit: Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2026-01-21 12:46:28 +0000
tcp: fix checksum calculation bug
The new function in_delayed_cksum_o() was introduced to compute
the checksum in the case the mbuf chain does not start with the
IP header. The offset of the IP header is specified by the
parameter iph_offset.
If iph_offset was positive, the function computed an incorrect
checksum.
Reviewed by: sobomax, tuexen
Fixes: 5feb38e37847 ("netinet: provide "at offset" variant of the in_delayed_cksum() API")
Differential Revision: https://reviews.freebsd.org/D54269
(cherry picked from commit c8b3b605ae854ead6c8804e0400d80cb8fa73fdf)
---
sys/netinet/ip_output.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index e3ef8e2c7dd9..e97e10db0e6b 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1068,8 +1068,8 @@ in_delayed_cksum_o(struct mbuf *m, uint16_t iph_offset)
if (csum == 0)
csum = 0xffff;
} else {
- cklen = ntohs(ip->ip_len);
- csum = in_cksum_skip(m, cklen, offset);
+ cklen = ntohs(ip->ip_len) - (ip->ip_hl << 2);
+ csum = in_cksum_skip(m, cklen + offset, offset);
}
offset += m->m_pkthdr.csum_data; /* checksum offset */