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)
Fri, May 8, 2:33 PM
Unknown Object (File)
Mon, May 4, 6:40 AM
Unknown Object (File)
Fri, May 1, 1:56 PM
Unknown Object (File)
Thu, Apr 30, 8:07 PM
Unknown Object (File)
Mon, Apr 27, 10:16 AM
Unknown Object (File)
Apr 17 2026, 11:30 PM
Unknown Object (File)
Apr 6 2026, 2:58 AM
Unknown Object (File)
Apr 5 2026, 6:01 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.