Eric Dumazet
7c85af8810
tcp: avoid reorders for TFO passive connections
...
We found that a TCP Fast Open passive connection was vulnerable
to reorders, as the exchange might look like
[1] C -> S S <FO ...> <request>
[2] S -> C S. ack request <options>
[3] S -> C . <answer>
packets [2] and [3] can be generated at almost the same time.
If C receives the 3rd packet before the 2nd, it will drop it as
the socket is in SYN_SENT state and expects a SYNACK.
S will have to retransmit the answer.
Current OOO avoidance in linux is defeated because SYNACK
packets are attached to the LISTEN socket, while DATA packets
are attached to the children. They might be sent by different cpus,
and different TX queues might be selected.
It turns out that for TFO, we created a child, which is a
full blown socket in TCP_SYN_RECV state, and we simply can attach
the SYNACK packet to this socket.
This means that at the time tcp_sendmsg() pushes DATA packet,
skb->ooo_okay will be set iff the SYNACK packet had been sent
and TX completed.
This removes the reorder source at the host level.
We also removed the export of tcp_try_fastopen(), as it is no
longer called from IPv6.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-09-28 22:11:19 -07:00
..
9p
9p: switch p9_client_read() to passing struct iov_iter *
2015-04-11 22:28:27 -04:00
bluetooth
Bluetooth: Add BT_ERR_RATELIMITED
2015-09-18 09:53:19 +02:00
caif
caif: fix a signedness bug in cfpkt_iterate()
2015-02-20 17:35:14 -05:00
irda
irda: Convert function pointer arrays and uses to const
2014-12-10 15:33:16 -05:00
iucv
s390/iucv: do not use arrays as argument
2015-09-21 16:03:04 -07:00
netfilter
netfilter: Pass net into nf_xfrm_me_harder
2015-09-18 22:00:22 +02:00
netns
Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
2015-08-04 23:57:45 -07:00
nfc
nfc: netlink: Add capability to reply to vendor_cmd with data
2015-08-20 22:00:11 +02:00
phonet
sctp
sctp: fix ASCONF list handling
2015-06-14 12:55:49 -07:00
tc_act
act_connmark: Remember the struct net instead of guessing it.
2015-09-18 21:59:31 +02:00
6lowpan.h
ieee802154: 6lowpan: remove tx full-size calc workaround
2015-09-17 13:20:04 +02:00
act_api.h
net_sched: make tcf_hash_destroy() static
2015-08-26 11:01:44 -07:00
addrconf.h
ipv6: remove unused neigh parameter from ndisc functions
2015-09-24 12:26:08 -07:00
af_ieee802154.h
ieee802154: af_ieee802154: fix typo in comment.
2015-09-17 13:20:05 +02:00
af_rxrpc.h
af_unix.h
net/unix: support SCM_SECURITY for stream sockets
2015-06-10 22:49:20 -07:00
af_vsock.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
ah.h
ipsec: Remove obsolete MAX_AH_AUTH_LEN
2014-09-18 10:54:36 +02:00
arp.h
neigh: Factor out ___neigh_lookup_noref
2015-03-04 00:23:23 -05:00
atmclip.h
ax25.h
ax25: Stop using sock->sk_protinfo.
2015-06-28 16:55:44 -07:00
ax88796.h
bond_3ad.h
bonding: Implement port churn-machine (AD standard 43.4.17).
2015-02-24 16:05:48 -05:00
bond_alb.h
net: Move bonding headers under include/net
2014-11-10 13:27:49 -05:00
bond_options.h
bonding: convert num_grat_arp to the new bonding option API
2015-07-27 01:05:24 -07:00
bonding.h
net/bonding: Export bond_option_active_slave_get_rcu
2015-08-30 18:08:50 -04:00
busy_poll.h
cfg80211-wext.h
cfg80211.h
Merge branch 'mac80211' into mac80211-next
2015-07-17 15:39:41 +02:00
cfg802154.h
ieee802154: add ack request default handling
2015-08-10 20:43:06 +02:00
checksum.h
net: Add inet_proto_csum_replace_by_diff utility function
2015-08-17 21:33:06 -07:00
cipso_ipv4.h
cipso: don't use IPCB() to locate the CIPSO IP option
2015-02-11 14:46:37 -05:00
cls_cgroup.h
cls_cgroup: factor out classid retrieval
2015-07-20 12:41:30 -07:00
codel.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-05-13 14:31:43 -04:00
compat.h
net: switch importing msghdr from userland to {compat_,}import_iovec()
2015-04-09 00:02:26 -04:00
datalink.h
dcbevent.h
dcbnl.h
net/dcb: Add IEEE QCN attribute
2015-03-06 21:50:02 -05:00
dn.h
dn_dev.h
dn_fib.h
dn_neigh.h
netfilter: Pass net into okfn
2015-09-17 17:18:37 -07:00
dn_nsp.h
dn_route.h
dsa.h
net: dsa: Add dsa_is_dsa_port() helper
2015-08-18 14:17:21 -07:00
dsfield.h
dst.h
inet: constify ip_route_output_flow() socket argument
2015-09-25 13:00:37 -07:00
dst_metadata.h
tun_dst: Remove opts_size
2015-08-31 21:23:42 -07:00
dst_ops.h
net: Remove protocol from struct dst_ops
2015-03-09 16:06:10 -04:00
esp.h
ethoc.h
net/ethoc: support big-endian register layout
2015-09-23 15:33:15 -07:00
fib_rules.h
net: ipv6: use common fib_default_rule_pref
2015-09-09 14:19:50 -07:00
firewire.h
flow.h
net: Fix vti use case with oif in dst lookups
2015-09-17 16:36:34 -07:00
flow_dissector.h
flow_dissector: Don't use bit fields.
2015-09-01 16:46:08 -07:00
flowcache.h
fou.h
ip_tunnel: Ops registration for secondary encap (fou, gue)
2014-11-12 15:01:35 -05:00
garp.h
gen_stats.h
net: sched: enable per cpu qstats
2014-09-30 01:02:26 -04:00
genetlink.h
genetlink: simplify genl_notify
2015-09-24 12:25:23 -07:00
geneve.h
geneve: Consolidate Geneve functionality in single module.
2015-08-27 15:42:48 -07:00
gre.h
gre: Remove support for sharing GRE protocol hook.
2015-08-10 14:03:54 -07:00
gro_cells.h
gro_cells: remove spinlock protecting receive queues
2015-08-31 15:17:17 -07:00
gue.h
gue: Protocol constants for remote checksum offload
2014-11-05 16:30:03 -05:00
icmp.h
ieee80211_radiotap.h
ieee802154_netdev.h
mac802154: cleanup llsec param flags
2015-06-12 11:42:29 +02:00
if_inet6.h
ipv6: do retries on stable privacy addresses
2015-03-23 22:12:09 -04:00
inet6_connection_sock.h
ipv6: constify inet6_csk_route_req() socket argument
2015-09-25 13:00:37 -07:00
inet6_hashtables.h
ipv6: get rid of __inet6_hash()
2015-03-18 22:00:35 -04:00
inet_common.h
net: Modify sk_alloc to not reference count the netns of kernel sockets.
2015-05-11 10:50:18 -04:00
inet_connection_sock.h
inet: constify inet_csk_route_req() socket argument
2015-09-25 13:00:37 -07:00
inet_ecn.h
inet_frag.h
inet: frags: remove INET_FRAG_EVICTED and use list_evictor for the test
2015-07-26 21:00:15 -07:00
inet_hashtables.h
inet: simplify timewait refcounting
2015-07-09 15:12:20 -07:00
inet_sock.h
inet: add IP_BIND_ADDRESS_NO_PORT to overcome bind(0) limitations
2015-06-06 23:57:12 -07:00
inet_timewait_sock.h
tcp/dccp: fix timewait races in timer handling
2015-09-21 16:32:29 -07:00
inetpeer.h
net: Add support for VRFs to inetpeer cache
2015-08-28 13:32:36 -07:00
ip.h
ip: constify ip_build_and_send_pkt() socket argument
2015-09-25 13:00:38 -07:00
ip6_checksum.h
net: add gro_compute_pseudo functions
2014-08-24 18:09:23 -07:00
ip6_fib.h
ipv6: include NLM_F_REPLACE in route replace notifications
2015-09-17 15:00:27 -07:00
ip6_route.h
ipv6: Add rt6_get_cookie() function
2015-05-25 13:25:34 -04:00
ip6_tunnel.h
ip6tunnel: make rx/tx bytes counters consistent
2015-09-20 22:36:42 -07:00
ip_fib.h
net: Fix behaviour of unreachable, blackhole and prohibit routes
2015-09-20 21:45:08 -07:00
ip_tunnels.h
ipv4: send arp replies to the correct tunnel
2015-09-24 14:31:36 -07:00
ip_vs.h
ipvs: add sysctl to ignore tunneled packets
2015-09-17 11:50:02 +09:00
ipcomp.h
ipconfig.h
ipv6.h
ipv6: constify ip6_xmit() sock argument
2015-09-25 13:00:38 -07:00
ipx.h
switch ipxrtr_route_packet() from iovec to msghdr
2014-11-24 04:28:49 -05:00
iw_handler.h
wext: add checked wrappers for adding events/points to streams
2015-02-28 21:31:12 +01:00
lapb.h
lib80211.h
lib80211: remove unused print_ssid()
2014-10-14 02:18:27 +02:00
llc.h
llc_c_ac.h
llc_c_ev.h
llc_c_st.h
llc: Make llc_conn_ev_qfyr_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_conn.h
net: Pass kern from net_proto_family.create to sk_alloc
2015-05-11 10:50:17 -04:00
llc_if.h
llc_pdu.h
llc_s_ac.h
llc_s_ev.h
llc_s_st.h
llc: Make llc_sap_action_t function pointer arrays const
2014-12-10 15:21:24 -05:00
llc_sap.h
lwtunnel.h
lwt: Add cfg argument to build_state
2015-08-24 10:34:40 -07:00
mac80211.h
mac80211: protect non-HT BSS when HT TDLS traffic exists
2015-09-04 14:25:46 +02:00
mac802154.h
ieee802154: 6lowpan: check on valid 802.15.4 frame
2015-09-17 13:20:04 +02:00
mip6.h
mld.h
ipv6: mld: answer mldv2 queries with mldv1 reports in mldv1 fallback
2014-09-22 16:23:15 -04:00
mpls.h
openvswitch: Add basic MPLS support to kernel
2014-11-05 23:52:33 -08:00
mpls_iptunnel.h
mpls: ip tunnel support
2015-07-21 10:39:05 -07:00
mrp.h
ndisc.h
ipv6: remove unused neigh parameter from ndisc functions
2015-09-24 12:26:08 -07:00
neighbour.h
net: add explicit logging and stat for neighbour table overflow
2015-08-10 13:46:21 -07:00
net_namespace.h
netfilter: nfacct: per network namespace support
2015-08-07 11:50:56 +02:00
net_ratelimit.h
netevent.h
netlabel.h
netlabel: fix the netlbl_catmap_setlong() dummy function
2014-08-07 20:55:21 -04:00
netlink.h
netlink: implement nla_get_in_addr and nla_get_in6_addr
2015-03-31 13:58:35 -04:00
netprio_cgroup.h
netrom.h
nexthop.h
nl802154.h
ieee802154: add ack request default handling
2015-08-10 20:43:06 +02:00
p8022.h
ping.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
pkt_cls.h
net: sched: remove tcf_proto from ematch calls
2014-10-06 18:02:32 -04:00
pkt_sched.h
net: sched: consolidate tc_classify{,_compat}
2015-08-27 14:18:48 -07:00
protocol.h
psnap.h
raw.h
rawv6.h
red.h
regulatory.h
cfg80211: allow wiphy specific regdomain management
2014-12-17 11:49:55 +01:00
request_sock.h
inet: constify inet_rtx_syn_ack() sock argument
2015-09-25 13:00:39 -07:00
rose.h
route.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-09-26 16:08:27 -07:00
rtnetlink.h
rtnetlink: RTEXT_FILTER_SKIP_STATS support to avoid dumping inet/inet6 stats
2015-09-15 15:25:02 -07:00
sch_generic.h
bpf: add bpf_redirect() helper
2015-09-17 21:09:07 -07:00
scm.h
secure_seq.h
slhc_vj.h
snmp.h
Merge branch 'for-3.18-consistent-ops' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-10-15 07:48:18 +02:00
sock.h
tcp: provide skb->hash to synack packets
2015-09-17 21:01:04 -07:00
Space.h
stp.h
switchdev.h
switchdev: reduce transaction phase enum down to a boolean
2015-09-24 22:59:22 -07:00
tcp.h
tcp: avoid reorders for TFO passive connections
2015-09-28 22:11:19 -07:00
tcp_memcontrol.h
tcp_states.h
inet: add TCP_NEW_SYN_RECV state
2015-03-12 22:58:12 -04:00
timewait_sock.h
inet: remove BUG_ON() in twsk_destructor()
2015-07-09 15:12:20 -07:00
transp_v6.h
tso.h
udp.h
net: Remove iocb argument from sendmsg and recvmsg
2015-03-02 13:06:31 -05:00
udp_tunnel.h
vxlan: do not receive IPv4 packets on IPv6 socket
2015-08-29 13:07:54 -07:00
udplite.h
net: switch memcpy_fromiovec()/memcpy_fromiovecend() users to copy_from_iter()
2015-02-04 01:34:15 -05:00
vrf.h
net: Make table id type u32
2015-09-01 14:32:44 -07:00
vsock_addr.h
vxlan.h
vxlan: support both IPv4 and IPv6 sockets in a single vxlan device
2015-09-26 22:40:55 -07:00
wext.h
wimax.h
net: treewide: Fix typo found in DocBook/networking.xml
2014-09-05 17:35:28 -07:00
x25.h
x25device.h
xfrm.h
xfrm: Remove unused afinfo method init_dst
2015-09-17 17:18:32 -07:00