Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp11208pxb; Fri, 15 Jan 2021 04:37:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJy2ktUCo1WBAqXYDJFek6W1+eyv1xGZnyBpyRzOdU9eToA8O8KWaQtumqOII9bxP+GrL0VD X-Received: by 2002:a17:906:6053:: with SMTP id p19mr8786635ejj.93.1610714240173; Fri, 15 Jan 2021 04:37:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610714240; cv=none; d=google.com; s=arc-20160816; b=wPYTRhv2qKJgclAA1TjTbEuoxjQWYqez5BnkKKCnrOSFW9TlQjpI+XPz2qgPYsbb8x +fUAnHFb4/KYORiERl2zqr8dc/apXbJ41WxqJpz3eGZIzB8ZBwnLWhXvO/hLd0KjxzrS wbnPoS+S1W+xxqiELdgH1uJkEX4lg1c+cUcvGewBr+2SUmM2NHIWES5cBggeVQphUFAC s5wNTaMoCdcFP6fglzUlCy9oYjbfKg+6ACCoaeQamK9ESTGvLKCnLhYAeoWBXYwCPHfa bSqibW3vjqS5HeiOaNn0CMatcPJt7DsFSxk3P3Ol629MOp2M/PplNqw+NX2wksKmqY25 +dKQ== 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=s/ddDBUs81NyIoqD3OH1Vxh1a/Tx7aDRRqQ6am2u0Ms=; b=ENFFwIRb8ClEj864/0lQ0kf9oC+/b6+VjCdQxAhRZxHjjOMegrNBapu92dz6vAU12Q iWLWIsls1tVfiVQ2tFkQk0OBOHv7EEw/lmrnYvk09SFRTptyX0FtatmLJpOxPWOhlRHU EMd794WBzzqK3OvFWMkuu/ejKCAMSRRhtbOl4bKi0MlptoQN+9jJD8I/pH5Tb+FEbfv5 qH362uVcBi9PB8lGDLhZoIXIgAwOlFbPNwTCxtqwsMqsArefvUp8wsV3kZLGctfSJL0r AtJ5RC1RB/HXgAk2n8FEup939FvPyKbyvxmwBEsXXhSpjl689sY8LaJ26zK0f1ylfpoV lRkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=nGVgBVD2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g10si1532813edv.97.2021.01.15.04.36.55; Fri, 15 Jan 2021 04:37:20 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=nGVgBVD2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S1732777AbhAOMe4 (ORCPT + 99 others); Fri, 15 Jan 2021 07:34:56 -0500 Received: from mail.kernel.org ([198.145.29.99]:40776 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731964AbhAOMel (ORCPT ); Fri, 15 Jan 2021 07:34:41 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0BFAE23403; Fri, 15 Jan 2021 12:34:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1610714065; bh=zVYmo3XbiPazUYCL6CR1z8pddrVJw7YXSaK4MqQj8u8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nGVgBVD2juqVWT8N/7v/+VV4S/3i4e9niIPOmLCq2sPGQdsdvjKproDyx5pO8kvpY Z1ICoWjU292r7kWkU2n1AJDYPVUSUbmVKI2SKtTcvrpeZ9hOPDRQ+LVcQlZb0zUUT6 YTfCuHrllgJReDz4Ct4P/e6hzztfe0ZlXFMYqVx0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Christian Perle , Florian Westphal , Pablo Neira Ayuso , Jakub Kicinski Subject: [PATCH 5.4 13/62] net: ip: always refragment ip defragmented packets Date: Fri, 15 Jan 2021 13:27:35 +0100 Message-Id: <20210115121959.044430145@linuxfoundation.org> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210115121958.391610178@linuxfoundation.org> References: <20210115121958.391610178@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Florian Westphal [ Upstream commit bb4cc1a18856a73f0ff5137df0c2a31f4c50f6cf ] Conntrack reassembly records the largest fragment size seen in IPCB. However, when this gets forwarded/transmitted, fragmentation will only be forced if one of the fragmented packets had the DF bit set. In that case, a flag in IPCB will force fragmentation even if the MTU is large enough. This should work fine, but this breaks with ip tunnels. Consider client that sends a UDP datagram of size X to another host. The client fragments the datagram, so two packets, of size y and z, are sent. DF bit is not set on any of these packets. Middlebox netfilter reassembles those packets back to single size-X packet, before routing decision. packet-size-vs-mtu checks in ip_forward are irrelevant, because DF bit isn't set. At output time, ip refragmentation is skipped as well because x is still smaller than the mtu of the output device. If ttransmit device is an ip tunnel, the packet size increases to x+overhead. Also, tunnel might be configured to force DF bit on outer header. In this case, packet will be dropped (exceeds MTU) and an ICMP error is generated back to sender. But sender already respects the announced MTU, all the packets that it sent did fit the announced mtu. Force refragmentation as per original sizes unconditionally so ip tunnel will encapsulate the fragments instead. The only other solution I see is to place ip refragmentation in the ip_tunnel code to handle this case. Fixes: d6b915e29f4ad ("ip_fragment: don't forward defragmented DF packet") Reported-by: Christian Perle Signed-off-by: Florian Westphal Acked-by: Pablo Neira Ayuso Signed-off-by: Jakub Kicinski Signed-off-by: Greg Kroah-Hartman --- net/ipv4/ip_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -303,7 +303,7 @@ static int __ip_finish_output(struct net if (skb_is_gso(skb)) return ip_finish_output_gso(net, sk, skb, mtu); - if (skb->len > mtu || (IPCB(skb)->flags & IPSKB_FRAG_PMTU)) + if (skb->len > mtu || IPCB(skb)->frag_max_size) return ip_fragment(net, sk, skb, mtu, ip_finish_output2); return ip_finish_output2(net, sk, skb);