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
F84041961: D35428.id106756.diff
Sat, May 18, 12:54 PM
Unknown Object (File)
Fri, May 10, 8:01 AM
Unknown Object (File)
Tue, Apr 30, 2:15 AM
Unknown Object (File)
Tue, Apr 30, 2:15 AM
Unknown Object (File)
Tue, Apr 30, 2:15 AM
Unknown Object (File)
Tue, Apr 30, 1:48 AM
Unknown Object (File)
Mon, Apr 29, 7:33 PM
Unknown Object (File)
Fri, Apr 26, 5:54 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.