Page MenuHomeFreeBSD

tcp: Missing mfree in rack and bbr.
ClosedPublic

Authored by rrs on Jun 11 2021, 3:05 PM.

Details

Summary

Recently we added logic that protects against a peer negotiating a timestamp, and
then not including a timestamp. This involved in the input path doing a goto done_with_input
label. Now I suspect the code was cribbed from one in Rack that has to do with the SYN.
This had a bug, i.e. it should have a m_freem(m) before going to the label (bbr had this
missing m_freem() but rack did not). This then caused the missing m_freem to show
up in both BBR and Rack. Also looking at the code referencing m->m_pkthdr.lro_nsegs
later (after processing) is not a good idea, even though its only for logging. Best to
copy that off before any frees can take place.

Test Plan

Run my setup that has had the mbuf leak and see if it cures it.

Diff Detail

Lint
Lint Skipped
Unit
Unit Tests Skipped