WSL2-Linux-Kernel/net
Eric Dumazet 1ab1f442aa tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack()
commit 9e046bb111f13461d3f9331e24e974324245140e upstream.

Some applications were reporting ETIMEDOUT errors on apparently
good looking flows, according to packet dumps.

We were able to root cause the issue to an accidental setting
of tp->retrans_stamp in the following scenario:

- client sends TFO SYN with data.
- server has TFO disabled, ACKs only SYN but not payload.
- client receives SYNACK covering only SYN.
- tcp_ack() eats SYN and sets tp->retrans_stamp to 0.
- tcp_rcv_fastopen_synack() calls tcp_xmit_retransmit_queue()
  to retransmit TFO payload w/o SYN, sets tp->retrans_stamp to "now",
  but we are not in any loss recovery state.
- TFO payload is ACKed.
- we are not in any loss recovery state, and don't see any dupacks,
  so we don't get to any code path that clears tp->retrans_stamp.
- tp->retrans_stamp stays non-zero for the lifetime of the connection.
- after first RTO, tcp_clamp_rto_to_user_timeout() clamps second RTO
  to 1 jiffy due to bogus tp->retrans_stamp.
- on clamped RTO with non-zero icsk_retransmits, retransmits_timed_out()
  sets start_ts from tp->retrans_stamp from TFO payload retransmit
  hours/days ago, and computes bogus long elapsed time for loss recovery,
  and suffers ETIMEDOUT early.

Fixes: a7abf3cd76 ("tcp: consider using standard rtx logic in tcp_rcv_fastopen_synack()")
CC: stable@vger.kernel.org
Co-developed-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Co-developed-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20240614130615.396837-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-07-05 09:14:35 +02:00
..
6lowpan
9p net/9p: fix uninit-value in p9_client_rpc() 2024-06-16 13:39:58 +02:00
802 mrp: introduce active flags to prevent UAF when applicant uninit 2022-12-31 13:14:42 +01:00
8021q vlan: skip nested type that is not IFLA_VLAN_QOS_MAPPING 2024-02-23 08:54:27 +01:00
appletalk appletalk: Fix Use-After-Free in atalk_ioctl 2023-12-20 15:17:37 +01:00
atm atm: Fix Use-After-Free in do_vcc_ioctl 2023-12-20 15:17:35 +01:00
ax25 net: ax25: Fix deadlock caused by skb_recv_datagram in ax25_recvmsg 2022-06-22 14:22:01 +02:00
batman-adv batman-adv: bypass empty buckets in batadv_purge_orig_ref() 2024-07-05 09:14:25 +02:00
bluetooth Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ 2024-07-05 09:14:18 +02:00
bpf bpf: Set run context for rawtp test_run callback 2024-07-05 09:14:06 +02:00
bpfilter
bridge net: bridge: fix corrupted ethernet header on multicast-to-unicast 2024-05-17 11:50:58 +02:00
caif net: caif: Fix use-after-free in cfusbl_device_notify() 2023-03-17 08:48:54 +01:00
can can: j1939: Fix UAF in j1939_sk_match_filter during setsockopt(SO_J1939_FILTER) 2024-02-23 08:55:10 +01:00
ceph libceph: use kernel_connect() 2023-10-19 23:05:36 +02:00
core net: do not leave a dangling sk pointer, when socket creation fails 2024-07-05 09:14:33 +02:00
dcb net: dcb: choose correct policy to parse DCB_ATTR_BCN 2023-08-11 15:13:53 +02:00
dccp net: inet: Retire port only listening_hash 2023-11-28 16:56:22 +00:00
dns_resolver keys, dns: Fix size check of V1 server-list header 2024-01-25 14:52:46 -08:00
dsa net: dsa: tag_sja1105: always prefer source port information from INCL_SRCPT 2024-06-16 13:39:54 +02:00
ethernet ethernet: Add helper for assigning packet type when dest address does not match device address 2024-05-02 16:24:49 +02:00
ethtool ethtool: netlink: Add missing ethnl_ops_begin/complete 2024-01-25 14:52:54 -08:00
hsr hsr: Handle failures in module init 2024-03-26 18:21:36 -04:00
ieee802154 net: drop nopreempt requirement on sock_prot_inuse_add() 2024-07-05 09:14:08 +02:00
ife net: sched: ife: fix potential use-after-free 2024-01-05 15:13:29 +01:00
ipv4 tcp: clear tp->retrans_stamp in tcp_rcv_fastopen_synack() 2024-07-05 09:14:35 +02:00
ipv6 seg6: fix parameter passing when calling NF_HOOK() in End.DX4 and End.DX6 behaviors 2024-07-05 09:14:31 +02:00
iucv net/iucv: fix the allocation size of iucv_path_table array 2024-03-26 18:21:13 -04:00
kcm net: kcm: fix incorrect parameter validation in the kcm_getsockopt) function 2024-03-26 18:21:23 -04:00
key net: af_key: fix sadb_x_filter validation 2023-08-26 14:23:32 +02:00
l2tp net l2tp: drop flow hash on forward 2024-05-17 11:50:48 +02:00
l3mdev l3mdev: l3mdev_master_upper_ifindex_by_index_rcu should be using netdev_master_upper_dev_get_rcu 2022-04-27 14:38:53 +02:00
lapb
llc llc: call sock_orphan() at release time 2024-02-23 08:54:54 +01:00
mac80211 wifi: mac80211: correctly parse Spatial Reuse Parameter Set element 2024-07-05 09:14:05 +02:00
mac802154 mac802154: fix llsec key resources release in mac802154_llsec_key_del 2024-04-10 16:18:39 +02:00
mctp mctp: perform route lookups under a RCU read-side lock 2023-10-25 11:58:59 +02:00
mpls net: mpls: fix stale pointer if allocation fails during device rename 2023-02-22 12:57:09 +01:00
mptcp mptcp: pm: update add_addr counters after connect 2024-07-05 09:14:23 +02:00
ncsi net/ncsi: Fix the multi thread manner of NCSI driver 2024-07-05 09:14:06 +02:00
netfilter netfilter: ipset: Fix suspicious rcu_dereference_protected() 2024-07-05 09:14:31 +02:00
netlabel calipso: fix memory leak in netlbl_calipso_add_pass() 2024-01-25 14:52:33 -08:00
netlink net: drop nopreempt requirement on sock_prot_inuse_add() 2024-07-05 09:14:08 +02:00
netrom netrom: Fix a memory leak in nr_heartbeat_expiry() 2024-07-05 09:14:29 +02:00
nfc nfc: nci: Fix handling of zero-length payload packets in nci_rx_work() 2024-06-16 13:39:48 +02:00
nsh nsh: Restore skb->{protocol,data,mac_header} for outer header in nsh_gso_segment(). 2024-05-17 11:50:48 +02:00
openvswitch openvswitch: Set the skbuff pkt_type for proper pmtud support. 2024-06-16 13:39:47 +02:00
packet af_packet: avoid a false positive warning in packet_setsockopt() 2024-07-05 09:14:26 +02:00
phonet phonet: fix rtm_phonet_notify() skb allocation 2024-05-17 11:50:58 +02:00
psample psample: Require 'CAP_NET_ADMIN' when joining "packets" group 2023-12-13 18:36:37 +01:00
qrtr net: qrtr: ns: Fix module refcnt 2024-06-16 13:39:33 +02:00
rds net/rds: fix possible cp null dereference 2024-04-10 16:19:37 +02:00
rfkill net: rfkill: gpio: set GPIO direction 2024-01-05 15:13:34 +01:00
rose net/rose: fix races in rose_kill_by_device() 2024-01-05 15:13:29 +01:00
rxrpc rxrpc: Fix response to PING RESPONSE ACKs to a dead call 2024-02-23 08:54:58 +01:00
sched sched: act_ct: add netns into the key of tcf_ct_flow_table 2024-07-05 09:14:30 +02:00
sctp net: drop nopreempt requirement on sock_prot_inuse_add() 2024-07-05 09:14:08 +02:00
smc net: drop nopreempt requirement on sock_prot_inuse_add() 2024-07-05 09:14:08 +02:00
strparser bpf: sockmap, strparser, and tls are reusing qdisc_skb_cb and colliding 2021-11-18 19:17:11 +01:00
sunrpc SUNRPC: return proper error from gss_wrap_req_priv 2024-07-05 09:14:16 +02:00
switchdev
tipc tipc: force a dst refcount before doing decryption 2024-07-05 09:14:30 +02:00
tls tls: fix missing memory barrier in tls_init 2024-06-16 13:39:48 +02:00
unix af_unix: Read with MSG_PEEK loops if the first unread byte is OOB 2024-07-05 09:14:19 +02:00
vmw_vsock virtio/vsock: fix logic which reduces credit update messages 2024-01-25 14:52:38 -08:00
wireless wifi: cfg80211: pmsr: use correct nla_get_uX functions 2024-07-05 09:14:05 +02:00
x25 net/x25: fix incorrect parameter validation in the x25_getsockopt() function 2024-03-26 18:21:23 -04:00
xdp net: drop nopreempt requirement on sock_prot_inuse_add() 2024-07-05 09:14:08 +02:00
xfrm net: fix __dst_negative_advice() race 2024-06-16 13:39:59 +02:00
Kconfig Remove DECnet support from kernel 2023-06-21 15:59:15 +02:00
Makefile Remove DECnet support from kernel 2023-06-21 15:59:15 +02:00
compat.c
devres.c
socket.c net: Save and restore msg_namelen in sock_sendmsg 2024-01-15 18:51:16 +01:00
sysctl_net.c