tcp_output.c 3015 /* Queue a data-only packet after the regular SYN for retransmission */ data = pskb_copy(syn_data, sk->sk_allocation); if (data == NULL) goto fallback; TCP_SKB_CB(data)->seq++; TCP_SKB_CB(data)->tcp_flags &= ~TCPHDR_SYN; // <=== TCP_SKB_CB(data)->tcp_flags = (TCPHDR_ACK|TCPHDR_PSH); // <=== tcp_connect_queue_skb(sk, data); fo->copied = data->len; This code intriduced in "net-tcp: Fast Open client - sending SYN-data" http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=783237e8daf13481ee234997cbbbb823872ac388
Maybe it should be: TCP_SKB_CB(data)->seq++; TCP_SKB_CB(data)->tcp_flags &= ~TCPHDR_SYN; TCP_SKB_CB(data)->tcp_flags |= (TCPHDR_ACK|TCPHDR_PSH); ?
Indeed that's what I intended. I can send a patch to address this. thanks for catching that.
Fixed in https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/commit/net/ipv4/tcp_output.c?id=355a901e6cf1b2b763ec85caa2a9f04fbcc4ab4a