Bug #13475
Updated by Marcel Telka over 1 year ago
Situation: * tcp connection was closed * there is more than one mss unsent * LSO is enabled In tcp_send() the calculation of bytes to send is done under the assumption that LSO will be used. A value higher than mss is set for lso_usable. Later this 'if' is taken, because we are at the end of the data stream: <pre> if (tcp->tcp_valid_bits != 0 && (tcp->tcp_valid_bits != TCP_FSS_VALID || ((*snxt + len) == tcp->tcp_fss))) { </pre> This causes cause data with len > mss being sent without LSO setup and due to this with IP segmentation. I can imagine two fixes: * the easy one: don't do LSO if any of the VALID bits is set * more complicated: with TCP_FSS_VALID don't send the complete unsent data with LSO but leave data <=mss for the next loop, which will then automaticaly be without LSO