android_kernel_motorola_sm6375/net/ipv4
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Neal Cardwell 4918865254 tcp: fix tcp_packet_delayed() for tcp_is_non_sack_preventing_reopen() behavior
[ Upstream commit d0fa59897e049e84432600e86df82aab3dce7aa5 ]

After the following commit from 2024:

commit e37ab7373696 ("tcp: fix to allow timestamp undo if no retransmits were sent")

...there was buggy behavior where TCP connections without SACK support
could easily see erroneous undo events at the end of fast recovery or
RTO recovery episodes. The erroneous undo events could cause those
connections to suffer repeated loss recovery episodes and high
retransmit rates.

The problem was an interaction between the non-SACK behavior on these
connections and the undo logic. The problem is that, for non-SACK
connections at the end of a loss recovery episode, if snd_una ==
high_seq, then tcp_is_non_sack_preventing_reopen() holds steady in
CA_Recovery or CA_Loss, but clears tp->retrans_stamp to 0. Then upon
the next ACK the "tcp: fix to allow timestamp undo if no retransmits
were sent" logic saw the tp->retrans_stamp at 0 and erroneously
concluded that no data was retransmitted, and erroneously performed an
undo of the cwnd reduction, restoring cwnd immediately to the value it
had before loss recovery.  This caused an immediate burst of traffic
and build-up of queues and likely another immediate loss recovery
episode.

This commit fixes tcp_packet_delayed() to ignore zero retrans_stamp
values for non-SACK connections when snd_una is at or above high_seq,
because tcp_is_non_sack_preventing_reopen() clears retrans_stamp in
this case, so it's not a valid signal that we can undo.

Note that the commit named in the Fixes footer restored long-present
behavior from roughly 2005-2019, so apparently this bug was present
for a while during that era, and this was simply not caught.

Fixes: e37ab7373696 ("tcp: fix to allow timestamp undo if no retransmits were sent")
Reported-by: Eric Wheeler <netdev@lists.ewheeler.net>
Closes: https://lore.kernel.org/netdev/64ea9333-e7f9-0df-b0f2-8d566143acab@ewheeler.net/
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Co-developed-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Yuchung Cheng <ycheng@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2025-06-27 11:02:57 +01:00
..
bpfilter
netfilter netfilter: Replace zero-length array with flexible-array member 2025-01-09 13:23:35 +01:00
af_inet.c net: inet: do not leave a dangling sk pointer in inet_create() 2024-12-14 19:44:51 +01:00
ah4.c
arp.c arp: use RCU protection in arp_xmit() 2025-03-13 12:43:18 +01:00
cipso_ipv4.c cipso: fix total option length computation 2024-07-05 09:08:22 +02:00
datagram.c
devinet.c ipv4: use RCU protection in inet_select_addr() 2025-03-13 12:43:17 +01:00
esp4.c net: ipv4: fix return value check in esp_remove_trailer 2023-10-25 11:53:21 +02:00
esp4_offload.c xfrm: Linearize the skb after offloading if needed. 2023-06-28 10:18:38 +02:00
fib_frontend.c ipv4: Mask upper DSCP bits and ECN bits in NETLINK_FIB_LOOKUP family 2024-11-08 16:20:37 +01:00
fib_lookup.h
fib_notifier.c
fib_rules.c ip: fib_rules: Fetch net from fib_rule in fib[46]_rule_configure(). 2025-06-04 14:32:34 +02:00
fib_semantics.c ipv4: fib: annotate races around nh->nh_saddr_genid and nh->nh_saddr 2023-10-25 11:53:21 +02:00
fib_trie.c ipv4: annotate data-races around fi->fib_dead 2023-09-23 10:59:58 +02:00
fou.c
gre_demux.c
gre_offload.c
icmp.c icmp: guard against too small mtu 2023-04-20 12:07:33 +02:00
igmp.c ipv4: igmp: fix refcnt uaf issue when receiving igmp query packet 2023-12-08 08:44:27 +01:00
inet_connection_sock.c tcp/dccp: Don't use timer_pending() in reqsk_queue_unlink(). 2025-05-02 07:39:22 +02:00
inet_diag.c inet_diag: Initialize pad field in struct inet_diag_req_v2 2024-07-18 11:40:50 +02:00
inet_fragment.c inet: inet_defrag: prevent sk release while still in use 2024-11-08 16:20:26 +01:00
inet_hashtables.c net: set SOCK_RCU_FREE before inserting socket into hashtable 2024-09-12 11:03:50 +02:00
inet_timewait_sock.c tcp: Fix NEW_SYN_RECV handling in inet_twsk_purge() 2024-05-02 16:18:37 +02:00
inetpeer.c
ip_forward.c
ip_fragment.c inet: inet_defrag: prevent sk release while still in use 2024-11-08 16:20:26 +01:00
ip_gre.c ipv4: ip_gre: Fix drops of small packets in ipgre_xmit 2024-11-08 16:20:36 +01:00
ip_input.c
ip_options.c
ip_output.c net: ipv4: fix a memleak in ip_setup_cork 2024-02-23 08:25:05 +01:00
ip_sockglue.c ipv{4,6}/raw: fix output xfrm lookup wrt protocol 2023-06-05 08:17:33 +02:00
ip_tunnel.c net: ip_tunnel: make sure to pull inner header in ip_tunnel_rcv() 2024-03-26 18:22:17 -04:00
ip_tunnel_core.c
ip_vti.c ip_vti: fix potential slab-use-after-free in decode_session6 2023-08-30 16:27:16 +02:00
ipcomp.c
ipconfig.c
ipip.c
ipmr.c ipmr: fix tables suspicious RCU usage 2024-12-14 19:44:34 +01:00
ipmr_base.c ipmr: do not call mr_mfc_uses_dev() for unres entries 2025-03-13 12:42:59 +01:00
Kconfig tcp: configurable source port perturb table size 2022-12-08 11:23:00 +01:00
Makefile
metrics.c ipv4: prevent potential spectre v1 gadget in ip_metrics_convert() 2023-02-06 07:52:45 +01:00
netfilter.c
netlink.c
nexthop.c net: nexthop: Initialize all fields in dumped nexthops 2024-08-19 05:33:41 +02:00
ping.c
proc.c
protocol.c
raw.c ipv{4,6}/raw: fix output xfrm lookup wrt protocol 2023-06-05 08:17:33 +02:00
raw_diag.c
route.c ipv4/route: Use this_cpu_inc() for stats on PREEMPT_RT 2025-06-27 11:02:54 +01:00
syncookies.c tcp: fix cookie_init_timestamp() overflows 2023-11-20 10:30:10 +01:00
sysctl_net_ipv4.c
tcp.c net: annotate lockless accesses to sk->sk_max_ack_backlog 2024-11-08 16:20:46 +01:00
tcp_bbr.c
tcp_bic.c
tcp_bpf.c tcp_bpf: Fix the sk_mem_uncharge logic in tcp_bpf_sendmsg 2024-12-14 19:44:47 +01:00
tcp_cdg.c
tcp_cong.c
tcp_cubic.c
tcp_dctcp.c tcp: Fix shift-out-of-bounds in dctcp_update_alpha(). 2024-06-16 13:28:45 +02:00
tcp_dctcp.h
tcp_diag.c net: annotate lockless accesses to sk->sk_max_ack_backlog 2024-11-08 16:20:46 +01:00
tcp_fastopen.c tcp: add TCP_INFO status for failed client TFO 2024-07-18 11:40:53 +02:00
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
tcp_illinois.c
tcp_input.c tcp: fix tcp_packet_delayed() for tcp_is_non_sack_preventing_reopen() behavior 2025-06-27 11:02:57 +01:00
tcp_ipv4.c net: annotate lockless accesses to sk->sk_ack_backlog 2024-11-08 16:20:46 +01:00
tcp_lp.c
tcp_metrics.c tcp_metrics: validate source addr length 2024-07-18 11:40:50 +02:00
tcp_minisocks.c tcp: tcp_check_req() can be called from process context 2023-03-11 16:44:12 +01:00
tcp_nv.c
tcp_offload.c net-timestamp: support TCP GSO case for a few missing flags 2025-03-13 12:43:30 +01:00
tcp_output.c tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets 2024-05-17 11:43:53 +02:00
tcp_rate.c
tcp_recovery.c tcp: fix excessive TLP and RACK timeouts from HZ rounding 2023-10-25 11:53:21 +02:00
tcp_scalable.c
tcp_timer.c tcp: avoid too many retransmit packets 2024-07-18 11:40:56 +02:00
tcp_ulp.c
tcp_vegas.c
tcp_vegas.h
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tunnel4.c
udp.c udp: gso: do not drop small packets when PMTU reduces 2025-03-13 12:43:06 +01:00
udp_diag.c
udp_impl.h
udp_offload.c net: gso: fix ownership in __udp_gso_segment 2025-03-13 12:43:29 +01:00
udp_tunnel.c net/tunnel: wait until all sk_user_data reader finish before releasing the sock 2023-01-18 11:41:14 +01:00
udplite.c udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated(). 2023-05-30 12:44:09 +01:00
xfrm4_input.c xfrm: Preserve vlan tags for transport mode software GRO 2024-05-17 11:43:53 +02:00
xfrm4_output.c
xfrm4_policy.c
xfrm4_protocol.c
xfrm4_state.c
xfrm4_tunnel.c