Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1790382pxp; Mon, 7 Mar 2022 02:23:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJyMi/aeXFk8eivj+itTMvx+SC8kixOc3/vHZKEsUSM1zgDwuuB2GAnN7gDn7bfu/iDEJTXj X-Received: by 2002:a17:907:2d25:b0:6d7:c831:5714 with SMTP id gs37-20020a1709072d2500b006d7c8315714mr8580232ejc.137.1646648474596; Mon, 07 Mar 2022 02:21:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646648474; cv=none; d=google.com; s=arc-20160816; b=FctPSUxzulhNIvo2L7a9uL4izITmAshX1p2RBWAWuM420yhaYhsQycjiFJxawHS/Ec 3+YbVniphWG6+ai+xNUTJvYnBWsxsj6770DqxJWz+EywTnOtv7dCm9tQbp1ciYQvgjpF bRJZVbz7FFYJjYbIk+bJ3CnjTezVBS4BwifuKnQjiF/9R8cGSLfITuVb+HA3Sb0yQcPw jkeJU4hOkgAC+3PnE4/ExgFhJt+7t64faMNfwkBMJHvzBaJ7316cruPuftjY3TcWZnOP nHHG0ACO9p3ncQ4PxDoymJta7mdc50fNLS26QMqFDrmzdnkgb9mcLprfUB2BTfE00aYF kkrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Coaj8lOaUErHvBc1mDRXnlkXMzanGHcVpMyA1Wn4Qhw=; b=V0S1sps59pQJshLY6M8jF4YCpJLQK+pp0sk5vw47uGOUIGxB4P5G4c0kNup9WUX4uy nsdE6lsd1eS1hNoepLUDA2axvX9gEPILO+UOnZD5ZfVa6ZZEY24GIcLFemSCj0QhuVLb RAqt4EqCX26GAcnWgqu4/HAMBY5I4OKjxx32cK1Iz6RsKnuCLut3iAG6fEUmj8j/RxZy CL/2S7VjRlTH8JHY307hH9Ix2vw+b87IOfkPoaigenWtJSLwuKB+UQPAmhwTOpVvpDfC ShC0hozmXCMXqJmktxXt9v0rVTQhx8yU/lRW3FxcYEMjB2tCTTyZvah0JqxNgxtHkMAi H8vg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0Si1ENbg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id g7-20020aa7dd87000000b00415a29c1ecfsi7619674edv.170.2022.03.07.02.20.51; Mon, 07 Mar 2022 02:21:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=0Si1ENbg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239032AbiCGJtF (ORCPT + 99 others); Mon, 7 Mar 2022 04:49:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239136AbiCGJjP (ORCPT ); Mon, 7 Mar 2022 04:39:15 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B52D06D383; Mon, 7 Mar 2022 01:34:43 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id DBD84B810BD; Mon, 7 Mar 2022 09:34:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2DAD5C340E9; Mon, 7 Mar 2022 09:34:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1646645672; bh=9O063uzd5t314367gVbpuKNTxNBHwFdVMWrBXUW3IX4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=0Si1ENbg66U0yve8CpwRf6EC7wz1vx+v3BXTbn64f1VsOpkNZB360c4TrG5NaRCLi n6M8hufxoM8uCxHTflemPsnbtkNHrrUStCIaqdfbymH4C+GGAukk7aPew790hRbZSq INyERsvUFBVH0n10gKCqr/1VtS0OEyxfdTSI9KJ0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jiri Bohac , Steffen Klassert Subject: [PATCH 5.10 105/105] Revert "xfrm: xfrm_state_mtu should return at least 1280 for ipv6" Date: Mon, 7 Mar 2022 10:19:48 +0100 Message-Id: <20220307091647.130976910@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307091644.179885033@linuxfoundation.org> References: <20220307091644.179885033@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-7.6 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jiri Bohac commit a6d95c5a628a09be129f25d5663a7e9db8261f51 upstream. This reverts commit b515d2637276a3810d6595e10ab02c13bfd0b63a. Commit b515d2637276a3810d6595e10ab02c13bfd0b63a ("xfrm: xfrm_state_mtu should return at least 1280 for ipv6") in v5.14 breaks the TCP MSS calculation in ipsec transport mode, resulting complete stalls of TCP connections. This happens when the (P)MTU is 1280 or slighly larger. The desired formula for the MSS is: MSS = (MTU - ESP_overhead) - IP header - TCP header However, the above commit clamps the (MTU - ESP_overhead) to a minimum of 1280, turning the formula into MSS = max(MTU - ESP overhead, 1280) - IP header - TCP header With the (P)MTU near 1280, the calculated MSS is too large and the resulting TCP packets never make it to the destination because they are over the actual PMTU. The above commit also causes suboptimal double fragmentation in xfrm tunnel mode, as described in https://lore.kernel.org/netdev/20210429202529.codhwpc7w6kbudug@dwarf.suse.cz/ The original problem the above commit was trying to fix is now fixed by commit 6596a0229541270fb8d38d989f91b78838e5e9da ("xfrm: fix MTU regression"). Signed-off-by: Jiri Bohac Signed-off-by: Steffen Klassert Signed-off-by: Greg Kroah-Hartman --- include/net/xfrm.h | 1 - net/ipv4/esp4.c | 2 +- net/ipv6/esp6.c | 2 +- net/xfrm/xfrm_state.c | 14 ++------------ 4 files changed, 4 insertions(+), 15 deletions(-) --- a/include/net/xfrm.h +++ b/include/net/xfrm.h @@ -1551,7 +1551,6 @@ void xfrm_sad_getinfo(struct net *net, s void xfrm_spd_getinfo(struct net *net, struct xfrmk_spdinfo *si); u32 xfrm_replay_seqhi(struct xfrm_state *x, __be32 net_seq); int xfrm_init_replay(struct xfrm_state *x); -u32 __xfrm_state_mtu(struct xfrm_state *x, int mtu); u32 xfrm_state_mtu(struct xfrm_state *x, int mtu); int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload); int xfrm_init_state(struct xfrm_state *x); --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c @@ -673,7 +673,7 @@ static int esp_output(struct xfrm_state struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); u32 padto; - padto = min(x->tfcpad, __xfrm_state_mtu(x, dst->child_mtu_cached)); + padto = min(x->tfcpad, xfrm_state_mtu(x, dst->child_mtu_cached)); if (skb->len < padto) esp.tfclen = padto - skb->len; } --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c @@ -708,7 +708,7 @@ static int esp6_output(struct xfrm_state struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); u32 padto; - padto = min(x->tfcpad, __xfrm_state_mtu(x, dst->child_mtu_cached)); + padto = min(x->tfcpad, xfrm_state_mtu(x, dst->child_mtu_cached)); if (skb->len < padto) esp.tfclen = padto - skb->len; } --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -2537,7 +2537,7 @@ void xfrm_state_delete_tunnel(struct xfr } EXPORT_SYMBOL(xfrm_state_delete_tunnel); -u32 __xfrm_state_mtu(struct xfrm_state *x, int mtu) +u32 xfrm_state_mtu(struct xfrm_state *x, int mtu) { const struct xfrm_type *type = READ_ONCE(x->type); struct crypto_aead *aead; @@ -2568,17 +2568,7 @@ u32 __xfrm_state_mtu(struct xfrm_state * return ((mtu - x->props.header_len - crypto_aead_authsize(aead) - net_adj) & ~(blksize - 1)) + net_adj - 2; } -EXPORT_SYMBOL_GPL(__xfrm_state_mtu); - -u32 xfrm_state_mtu(struct xfrm_state *x, int mtu) -{ - mtu = __xfrm_state_mtu(x, mtu); - - if (x->props.family == AF_INET6 && mtu < IPV6_MIN_MTU) - return IPV6_MIN_MTU; - - return mtu; -} +EXPORT_SYMBOL_GPL(xfrm_state_mtu); int __xfrm_init_state(struct xfrm_state *x, bool init_replay, bool offload) {