• Luke Hsiao's avatar
    tcp: enable data-less, empty-cookie SYN with TFO_SERVER_COOKIE_NOT_REQD · e3faa49b
    Luke Hsiao authored
    Since the original TFO server code was implemented in commit
    168a8f58
    
     ("tcp: TCP Fast Open Server -
    main code path") the TFO server code has supported the sysctl bit flag
    TFO_SERVER_COOKIE_NOT_REQD. Currently, when the TFO_SERVER_ENABLE and
    TFO_SERVER_COOKIE_NOT_REQD sysctl bit flags are set, a server connection
    will accept a SYN with N bytes of data (N > 0) that has no TFO cookie,
    create a new fast open connection, process the incoming data in the SYN,
    and make the connection ready for accepting. After accepting, the
    connection is ready for read()/recvmsg() to read the N bytes of data in
    the SYN, ready for write()/sendmsg() calls and data transmissions to
    transmit data.
    
    This commit changes an edge case in this feature by changing this
    behavior to apply to (N >= 0) bytes of data in the SYN rather than only
    (N > 0) bytes of data in the SYN. Now, a server will accept a data-less
    SYN without a TFO cookie if TFO_SERVER_COOKIE_NOT_REQD is set.
    
    Caveat! While this enables a new kind of TFO (data-less empty-cookie
    SYN), some firewall rules setup may not work if they assume such packets
    are not legit TFOs and will filter them.
    Signed-off-by: default avatarLuke Hsiao <lukehsiao@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Acked-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20210816205105.2533289-1-luke.w.hsiao@gmail.com
    
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    e3faa49b
tcp_fastopen.c 16.6 KB