From nobody Fri Apr 04 09:05:48 2025 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4ZTXl02rscz5rwvm; Fri, 04 Apr 2025 09:05:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZTXl00y2Gz3WlX; Fri, 04 Apr 2025 09:05:48 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743757548; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mvU9mIsQL4ZDokibBb1IMhQ1D6DMOFj1Xz4hmZWa1QY=; b=mIPA9PgDVe4OAZSGqYubD3bxZ7/gjj0KnlP/OmLPSgsV048NAv8RXOx5/IKZ47u47BSeVP HENjAUNYtsRYttxKNDdpa8OKuYjTFUgfxnDLlkeqvn1MkT498Cpi8xcZUTXGv9Je5luD0m aMuoXecz3/Aios37eJtqlQoan182hWDMiJ5QbX9M9C13u6C6BbxQRxz1CKHmN6k/MFsJUa NpKI5Hboc0Az5BbsIpG3Z75fqDRt8SlEscRCabK3O76ZI/snZq35svLR/mnjQTlhX0d2Oq niwY9Id4hAHhmWs6LBq24uGwEWEDTqtWSm6u+v4XV5rXJtHgHjeOMgHTlqXMuw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1743757548; a=rsa-sha256; cv=none; b=TQFM4TmP7EW5YeTVp/2tRjN/Ry6rDL/4A2bJcZuiymZ/VOeJm7vTbuMtzWMNpsBfp87N5a nwblfL74BounU18idTLcfnuaESy8JOhRmJMcC/pNtOI3Tm1yzxKFe/vk6+LiawLGP0lg3h q75xUGw5SG8jrqQ7yuAN/YaQeYABdNubDCxdNAumdqXCp+oviGIbf5Vynmi1JbK6VdF2sN SPYZ85eaTMielhDVeorI9Ap/P9fIjcLiMIlMJ24XI1NWvn1JVpB4/lddo3vBvJIixnCtPz A1C7ezclncUvzLSkotR/mXxHH4wjhND2l1NKsY2irOiVSxs5I9L+UkexbU37Qg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1743757548; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mvU9mIsQL4ZDokibBb1IMhQ1D6DMOFj1Xz4hmZWa1QY=; b=w5DSZElGHPzRCmtIVZMv9sLRtBp9D4d75MayXk9LRp4oKwgShQOmDYKFVffZhd9G4YZ+9N /8oDWfPzrM0d9W7tYcYDsBrvqewgNlvE7uyxJWhnEsYr7Bd3YFbzr0X5sbpmsxWdqsM08d Z01CbhgA1eernBGP21oaVd8JTNXMjn/E2GMi0Xy9rZgWJexle8L0YawwV7fAAiHes+EHjU 63QtRzf4Kaz9uCEGrFjV18ElqcAt6YVEBXI4hLQ679+130owdiQSGPHPnqegZI7Zt4nlN3 rFTis3QhiH+m912v/uDwbaPHeJ3Ve45lE7cvAcg1s4khwEf/yPL5q9BiuoYk+Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZTXl00YLBzgxh; Fri, 04 Apr 2025 09:05:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 53495mvB054699; Fri, 4 Apr 2025 09:05:48 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 53495miV054696; Fri, 4 Apr 2025 09:05:48 GMT (envelope-from git) Date: Fri, 4 Apr 2025 09:05:48 GMT Message-Id: <202504040905.53495miV054696@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Michael Tuexen Subject: git: e754d89bba8c - stable/14 - tcp: fix detection of bad RTOs List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tuexen X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: e754d89bba8c526fd1ff792616ff4cbf9c6e093e Auto-Submitted: auto-generated The branch stable/14 has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=e754d89bba8c526fd1ff792616ff4cbf9c6e093e commit e754d89bba8c526fd1ff792616ff4cbf9c6e093e Author: Michael Tuexen AuthorDate: 2025-03-20 15:17:40 +0000 Commit: Michael Tuexen CommitDate: 2025-04-04 09:05:10 +0000 tcp: fix detection of bad RTOs If timestamps are enabled, the actions performed by a retransmission timeout were rolled back, when they should not. It is needed to make sure the incoming segment advances SND.UNA. To do this, remove the incorrect upfront check and extend the check in the fast path to handle also the case of timestamps. PR: 282605 Reviewed by: cc, rscheff, Peter Lei Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D49414 (cherry picked from commit fbcf3b74e8f2c0c5ba37f1839bfe9395eb2fd0b1) --- sys/netinet/tcp_input.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index c868ba648bd7..104e98436f0c 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1637,11 +1637,6 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct tcphdr *th, to.to_tsecr -= tp->ts_offset; if (TSTMP_GT(to.to_tsecr, tcp_ts_getticks())) to.to_tsecr = 0; - else if (tp->t_rxtshift == 1 && - tp->t_flags & TF_PREVVALID && - tp->t_badrxtwin != 0 && - TSTMP_LT(to.to_tsecr, tp->t_badrxtwin)) - cc_cong_signal(tp, th, CC_RTO_ERR); } /* * Process options only when we get SYN/ACK back. The SYN case @@ -1786,15 +1781,17 @@ tcp_do_segment(struct tcpcb *tp, struct mbuf *m, struct tcphdr *th, TCPSTAT_INC(tcps_predack); /* - * "bad retransmit" recovery without timestamps. + * "bad retransmit" recovery. */ - if ((to.to_flags & TOF_TS) == 0 && - tp->t_rxtshift == 1 && + if (tp->t_rxtshift == 1 && tp->t_flags & TF_PREVVALID && tp->t_badrxtwin != 0 && - TSTMP_LT(ticks, tp->t_badrxtwin)) { + (((to.to_flags & TOF_TS) != 0 && + to.to_tsecr != 0 && + TSTMP_LT(to.to_tsecr, tp->t_badrxtwin)) || + ((to.to_flags & TOF_TS) == 0 && + TSTMP_LT(ticks, tp->t_badrxtwin)))) cc_cong_signal(tp, th, CC_RTO_ERR); - } /* * Recalculate the transmit timer / rtt.