aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2024-10-02 19:12:37 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2024-10-02 19:12:37 +0000
commit519981e3c09c2875b136635459c87ab24d3104e2 (patch)
tree54f91e5da719e735d0ddeb89db439afe08d85d67
parentc08e016f000ce417a6fb413025ab81ad66cbdfff (diff)
downloadsrc-519981e3c09c.tar.gz
src-519981e3c09c.zip
tcp_output: Clear FIN if tcp_m_copym truncates output length
Reviewed by: rscheff, tuexen, gallatin Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D46824
-rw-r--r--sys/netinet/tcp_output.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index fe1f15c26338..78ecfe5289b6 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1078,13 +1078,18 @@ send:
sbsndptr_adv(&so->so_snd, mb, len);
m->m_len += len;
} else {
+ int32_t old_len;
+
if (SEQ_LT(tp->snd_nxt, tp->snd_max))
msb = NULL;
else
msb = &so->so_snd;
+ old_len = len;
m->m_next = tcp_m_copym(mb, moff,
&len, if_hw_tsomaxsegcount,
if_hw_tsomaxsegsize, msb, hw_tls);
+ if (old_len != len)
+ flags &= ~TH_FIN;
if (len <= (tp->t_maxseg - optlen)) {
/*
* Must have ran out of mbufs for the copy