From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ED83012D74D; Tue, 30 Apr 2024 10:43:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714473824; cv=none; b=RkuAmgOlO+ZcZMROf8nJ4lLbg+/D9Gl2XZpxDmh/StwbqlCiD9OZtXQ+rwgWSMuaI9TUJ6DOzRQyFQ79KbL7f992fhvT3Z7sPqlA8pkrqT039tgyHPh3SISat5V28CUgUfLEbQDhvt5Ymth4J8E+fpu1eWTSIyStjOCSzs+FHCE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714473824; c=relaxed/simple; bh=VU6TZYeUxiP9MKY8uq8nfNX0NdWG3D+lyihds4Z/fpg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UcbiESn0oQgm42PVifGY5pPEsjKs1CfgAFDcdd3MO6q/xy/0GSk00kb+iyjTg+zfzkFg0PsJsLwYKaShQclBOkNpJazsxycUthNZ+6SBr4BMe/npGyF9vHx18r/RZXjBd77qkikwAo42HJ87rxGoFulkgfAOS5MTflcriFgaDVI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=KHcUjzwp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="KHcUjzwp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6AFD0C4AF1B; Tue, 30 Apr 2024 10:43:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1714473823; bh=VU6TZYeUxiP9MKY8uq8nfNX0NdWG3D+lyihds4Z/fpg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KHcUjzwpcUj+n+bpa4FvXltUuvCOI2J4Lv2t/SRBg2ak6qySHs03yat1zxcicX9TR B5lmHYRPBe70l+JNpQPpHPvPoKauKigwGUB8AAmLXgjMSVwiB3768S/eEPpw5V0+p4 SUZ8sqfaVDc7j7BnG8yBYuuoxE/Gdv3eN8eOAT6k= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Ismael Luceno , Andreas Taschner , Julian Anastasov , Pablo Neira Ayuso , Sasha Levin , Firo Yang Subject: [PATCH 4.19 49/77] ipvs: Fix checksumming on GSO of SCTP packets Date: Tue, 30 Apr 2024 12:39:28 +0200 Message-ID: <20240430103042.584119200@linuxfoundation.org> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240430103041.111219002@linuxfoundation.org> References: <20240430103041.111219002@linuxfoundation.org> User-Agent: quilt/0.67 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Ismael Luceno [ Upstream commit e10d3ba4d434ed172914617ed8d74bd411421193 ] It was observed in the wild that pairs of consecutive packets would leave the IPVS with the same wrong checksum, and the issue only went away when disabling GSO. IPVS needs to avoid computing the SCTP checksum when using GSO. Fixes: 90017accff61 ("sctp: Add GSO support") Co-developed-by: Firo Yang Signed-off-by: Ismael Luceno Tested-by: Andreas Taschner Acked-by: Julian Anastasov Signed-off-by: Pablo Neira Ayuso Signed-off-by: Sasha Levin --- net/netfilter/ipvs/ip_vs_proto_sctp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/net/netfilter/ipvs/ip_vs_proto_sctp.c b/net/netfilter/ipvs/ip_vs_proto_sctp.c index b0cd7d08f2a7a..18e2e489d0e51 100644 --- a/net/netfilter/ipvs/ip_vs_proto_sctp.c +++ b/net/netfilter/ipvs/ip_vs_proto_sctp.c @@ -123,7 +123,8 @@ sctp_snat_handler(struct sk_buff *skb, struct ip_vs_protocol *pp, if (sctph->source != cp->vport || payload_csum || skb->ip_summed == CHECKSUM_PARTIAL) { sctph->source = cp->vport; - sctp_nat_csum(skb, sctph, sctphoff); + if (!skb_is_gso(skb) || !skb_is_gso_sctp(skb)) + sctp_nat_csum(skb, sctph, sctphoff); } else { skb->ip_summed = CHECKSUM_UNNECESSARY; } @@ -171,7 +172,8 @@ sctp_dnat_handler(struct sk_buff *skb, struct ip_vs_protocol *pp, (skb->ip_summed == CHECKSUM_PARTIAL && !(skb_dst(skb)->dev->features & NETIF_F_SCTP_CRC))) { sctph->dest = cp->dport; - sctp_nat_csum(skb, sctph, sctphoff); + if (!skb_is_gso(skb) || !skb_is_gso_sctp(skb)) + sctp_nat_csum(skb, sctph, sctphoff); } else if (skb->ip_summed != CHECKSUM_PARTIAL) { skb->ip_summed = CHECKSUM_UNNECESSARY; } -- 2.43.0