Skip to content
  • Randall Stewart's avatar
    tcp: A better fix for the previously attempted fix of the ack-war issue with tcp. · 4747500d
    Randall Stewart authored
    So it turns out that my fix before was not correct. It ended with us failing
    some of the "improved" SYN tests, since we are not in the correct states.
    With more digging I have figured out the root of the problem is that when
    we receive a SYN|FIN the reassembly code made it so we create a segq entry
    to hold the FIN. In the established state where we were not in order this
    would be correct i.e. a 0 len with a FIN would need to be accepted. But
    if you are in a front state we need to strip the FIN so we correctly handle
    the ACK but ignore the FIN. This gets us into the proper states
    and avoids the previous ack war.
    
    I back out some of the previous changes but then add a new change
    here in tcp_reass() that fixes the root cause of the issue. We still
    leave the rack panic fixes in place however.
    
    Reviewed by: mtuexen
    Sponsored by: Netflix Inc
    Differential Revision:	https://reviews.freebsd.org/D30627
    4747500d