Page MenuHomeFreeBSD

tcp: count only the SACK blocks that fit in tcp_maxseg()
Needs ReviewPublic

Authored by nick_spun.io on Thu, Oct 8, 5:43 AM.
Tags
None
Referenced Files
F175804551: D60460.id.diff
Tue, Oct 13, 12:10 PM
Unknown Object (File)
Mon, Oct 12, 12:13 PM
Unknown Object (File)
Mon, Oct 12, 9:49 AM
Unknown Object (File)
Mon, Oct 12, 9:31 AM
Unknown Object (File)
Mon, Oct 12, 6:14 AM
Unknown Object (File)
Mon, Oct 12, 12:36 AM
Unknown Object (File)
Mon, Oct 12, 12:33 AM
Unknown Object (File)
Mon, Oct 12, 12:31 AM

Details

Reviewers
tuexen
rscheff
glebius
adrian
Group Reviewers
transport
Summary

tcp_addoptions() sends only the SACK blocks that fit in TCP_MAXOLEN.
tcp_maxseg() counted every pending block and clamped the total, so
without timestamps and with five or more blocks pending it came out 4
bytes below the segment tcp_output() sends. Limited transmit after an
RTO then sent one full segment and failed the "sent too much" KASSERT.

PR: 282605

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 77914
Build 74797: arc lint + arc unit

Event Timeline

glebius added reviewers: tuexen, rscheff.

Looks correct, but let's check with @rscheff. Thanks!

sys/netinet/tcp_subr.c
3806–3807

I'd suggest to declare sockblks in this scope. Up to you.

Let me write a packetdrill-test to make sure we catch an KASSERT-issue.

I am trying to trigger a "sent too much" KASSERT but was not successful up to now. Can you provide a BBLog file of such a situation?

I am trying to trigger a "sent too much" KASSERT but was not successful up to now. Can you provide a BBLog file of such a situation?

Here's a bblog file and a packetdrill repro


I am trying to trigger a "sent too much" KASSERT but was not successful up to now. Can you provide a BBLog file of such a situation?

Here's a bblog file and a packetdrill repro


How can I access these files?

I am trying to trigger a "sent too much" KASSERT but was not successful up to now. Can you provide a BBLog file of such a situation?

Here's a bblog file and a packetdrill repro


How can I access these files?

Sorry, I forgot that attached files are still private by default - you should be able to see them now.