diff options
author | John Baldwin <jhb@FreeBSD.org> | 2024-10-02 19:12:37 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2024-10-02 19:12:37 +0000 |
commit | 519981e3c09c2875b136635459c87ab24d3104e2 (patch) | |
tree | 54f91e5da719e735d0ddeb89db439afe08d85d67 | |
parent | c08e016f000ce417a6fb413025ab81ad66cbdfff (diff) | |
download | src-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.c | 5 |
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 |