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)
Sun, Jun 2, 9:08 AM
Unknown Object (File)
Mon, May 27, 7:19 PM
Unknown Object (File)
May 18 2024, 12:54 PM
Unknown Object (File)
May 10 2024, 8:01 AM
Unknown Object (File)
Apr 30 2024, 2:15 AM
Unknown Object (File)
Apr 30 2024, 2:15 AM
Unknown Object (File)
Apr 30 2024, 2:15 AM
Unknown Object (File)
Apr 30 2024, 1:48 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 45902
Build 42790: arc lint + arc unit

Event Timeline

hselasky added inline comments.
sys/netinet/tcp_sack.c
969

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.