Page MenuHomeFreeBSD

tcp: remove goto and address another NULL deref in SACK
ClosedPublic

Authored by rscheff on Jun 8 2022, 6:44 AM.
Tags
None
Referenced Files
Unknown Object (File)
Wed, Feb 5, 3:12 AM
Unknown Object (File)
Fri, Jan 31, 7:45 PM
Unknown Object (File)
Jan 5 2025, 7:46 PM
Unknown Object (File)
Dec 25 2024, 12:18 PM
Unknown Object (File)
Dec 12 2024, 11:26 PM
Unknown Object (File)
Nov 27 2024, 7:14 PM
Unknown Object (File)
Oct 29 2024, 4:17 AM
Unknown Object (File)
Oct 26 2024, 9:23 AM

Details

Summary

Missed another NULL dereference during KASSERTS after traversing
the scoreboard. While at it, scratch the goto by making the
traversal conditional.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 45903
Build 42791: arc lint + arc unit

Event Timeline

hselasky added inline comments.
sys/netinet/tcp_sack.c
971–972

The NULL check should be inside the if (SEQ_GEQ()).

sys/netinet/tcp_sack.c
962

I would just write the code like this:

for (;;) {
hole = TAILQ_NEXT(hole, scblink);
if (hole == NULL)
return (hole);
if ....
   break;
}
962

To avoid duplicated NULL checks.

  • unconditional loop, with checks inside
This revision was not accepted when it landed; it landed in state Needs Review.Jun 8 2022, 7:39 AM
This revision was automatically updated to reflect the committed changes.