From nobody Thu Mar 20 19:35:34 2025 X-Original-To: dev-commits-src-main@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 4ZJbQb114Cz5rHQk; Thu, 20 Mar 2025 19:35:35 +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 4ZJbQb0Vdlz46Wf; Thu, 20 Mar 2025 19:35:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1742499335; 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=GZw13nzikHsugiypvgVo1MlpGFdNM00A7UwX9MAzmJo=; b=RfCG2c5O0l20BgdrpdYrcKS3QCZKDt1IqkciBOl8dRXIxG8xBh1mlD7+n5TlmoQgTB5XxQ 3Byqw67JNkF2auLieyfTDBxjL3+HTWHzHx0wNJ5loqbfy6+mkOQzIPhenR7sqOitYFCX4E qFg2nFAHsoDo17mL7Nwhod6XSLuodOx0MGHt+p2BFHWA09ocXh+lb3riZ9tkxSFXwIJxxG VonI7vt6+zvXFa1kvZL9sNGlEgzDffjKWXfifTn0Q9KzMVLd2M4blYjlgRexGr1P8fsy/u 5yp+8KIKJDRZAapIUyBVGPe2PCSUk6ha0KvnSh7sP+kvqECT3hHGrkwA0/fk4Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1742499335; a=rsa-sha256; cv=none; b=xpNdQmnV7aZ7WNhMRS5poJqY0k0FMQgO20r3rUJmuwYL+dIGvqqoCHJlvHfhjGhkOuDEsG Onz1THPLXxHZ0QsOf0eDSm7++G915du/t81gnSxcGjB0mF310sFJOjgcWlCLgGlER/LI8n XIHm6MRjMXzcIUlLwj6kDl9qrwhUr0SW/5lULsGznhwIQadgljrJmaupUeaIisHzyGRNaL Y9kelwSYt34KDOb4y82naLZb+PhA2TgU7NJeIY7DmcOdJ78Fjmzt8qspPVzOFbiQbiJI9m 03APj11n92ycgvfj4UykuL7+rAKP940hN3bnJ5C2QmOYlEuAfmKL4v9LAWy1FA== 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=1742499335; 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=GZw13nzikHsugiypvgVo1MlpGFdNM00A7UwX9MAzmJo=; b=KjGI0YAGigcBHbhnNRcUs8BrMoj1K3f9eU11dWvkJ1yaKqd8HfxTNALAkNlwyTXTG6rYaJ h/ACmNBzPTWXJBYDWVMRt59T1eaogLudhqEcNS2kQcAQNQwCLwLwZH7FM3tSfWoTABvLli 4PT9tnHtHxM6stV7+q37ot32Iog+n/aN9LI74+7rT34Fzwspah4i+fpoY3PWi9A8YrRWLO Vs7o7CrIJseDgbKJ7cT9ZwmRbNAF+U550pNF1hTQDmOO614L1PvZzOYSLqTiHaYOoZMKXY guCdlNVV+ZTpc2dFtXaIvi9z1QMdcjuNTKQ3DlHQgQrjg/g7vdU7t+i1Qd4h2g== 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 4ZJbQZ74J5z1HRZ; Thu, 20 Mar 2025 19:35:34 +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 52KJZYD1026829; Thu, 20 Mar 2025 19:35:34 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 52KJZYpG026826; Thu, 20 Mar 2025 19:35:34 GMT (envelope-from git) Date: Thu, 20 Mar 2025 19:35:34 GMT Message-Id: <202503201935.52KJZYpG026826@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Michael Tuexen Subject: git: fbcf3b74e8f2 - main - tcp: fix detection of bad RTOs List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: fbcf3b74e8f2c0c5ba37f1839bfe9395eb2fd0b1 Auto-Submitted: auto-generated The branch main has been updated by tuexen: URL: https://cgit.FreeBSD.org/src/commit/?id=fbcf3b74e8f2c0c5ba37f1839bfe9395eb2fd0b1 commit fbcf3b74e8f2c0c5ba37f1839bfe9395eb2fd0b1 Author: Michael Tuexen AuthorDate: 2025-03-20 15:17:40 +0000 Commit: Michael Tuexen CommitDate: 2025-03-20 15:17:40 +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 MFC after: 3 days Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D49414 --- 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 cf480ccf9772..8f50843d940d 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -1635,11 +1635,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); } } /* @@ -1792,15 +1787,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.