From patchwork Fri Dec 9 03:08:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zheng Li X-Patchwork-Id: 704306 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tZcdw6cmsz9sD6 for ; Fri, 9 Dec 2016 14:09:24 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="R9dtOHDR"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753628AbcLIDJC (ORCPT ); Thu, 8 Dec 2016 22:09:02 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:35775 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750982AbcLIDJB (ORCPT ); Thu, 8 Dec 2016 22:09:01 -0500 Received: by mail-pf0-f196.google.com with SMTP id i88so321685pfk.2; Thu, 08 Dec 2016 19:09:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=dtpM0oFOUPEOF8jEVzzgyr8P8eKMswvrgjbtbWS/n7g=; b=R9dtOHDRJbJOSbCkvqmLspwhVq76ekuaHhunQ4QMh9HlwpAy8FWztiNgsAtZ4TkrEQ GrDHF+oiJTHRoah385F5bNP0Y71eQ0VbC6DonYZ6bdbThwSQOw2iYeqmZlb1wQVfbXuS yU7x12aeIPUS3wfPTbLutuOMehXfG/GdwgtVD9EO4TzHQfzEdVPw/UvUhnCdDv5zHHeN l0JCe9aOx6se0Bz7eoOrEcAZI3TMXo5tQ7pMH20sQaw329w5zc77e6/eiYbyu1TpbH9J JJCyc8Huv4r7zDz2YF3VJ7rJ8DzIkK5bYFiI2yOgIB6RTg4+aGYgVQLZjgQ3pizYtg8U M6Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=dtpM0oFOUPEOF8jEVzzgyr8P8eKMswvrgjbtbWS/n7g=; b=fr6OYV9dK5puRJTTQc/NlAQ52PUwgGHhN6EnpF+uTgS0G9a1jFKB0xtQ14OiisajQu cPDi7Htq5PdY2syOPPg1UHXezBhkYU9cD715W86YImFavjiWkxt6+VjLujtnp4yvDNRo AwwIMYunZ/W3vSUzEuJ199AHVenA6BSDyRWjc7w4BhEjvSjVOih5KP8cTgzIwwQqApba vTCVtYTThgxAK8gdn4xdDIb8MTvsfSubG8RqtvPdDP53nPFXQeLO/wgpC8tpzKgDMu4r DncfWt7ul6rp+K0qWxAXyCqKTmHaFr7YAMb5gf6StY5CgWVNjzp0lPP23gjRUaK0rLBW 8kPQ== X-Gm-Message-State: AKaTC01me/R0yNXdVbUDvyT74qONw8LOuWYFNGc/MXDkmy6lk0yPPV/naN5z8FeWqcH6Og== X-Received: by 10.99.246.5 with SMTP id m5mr140457899pgh.9.1481252940596; Thu, 08 Dec 2016 19:09:00 -0800 (PST) Received: from localhost.cn.ao.ericsson.se ([106.38.5.68]) by smtp.gmail.com with ESMTPSA id o126sm53257446pga.34.2016.12.08.19.08.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 08 Dec 2016 19:09:00 -0800 (PST) From: Zheng Li To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, davem@davemloft.net, kuznet@ms2.inr.ac.ru, jmorris@namei.org, yoshfuji@linux-ipv6.org, kaber@trash.net Cc: james.z.li@ericsson.com Subject: [PATCH] ipv4: Should use consistent conditional judgement for ip fragment in __ip_append_data and ip_finish_output Date: Fri, 9 Dec 2016 11:08:38 +0800 Message-Id: <1481252918-3514-1-git-send-email-lizheng043@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: zheng li There is an inconsitent conditional judgement in __ip_append_data and ip_finish_output functions, the variable length in __ip_append_data just include the length of applicatoin's payload and udp header, don't include the length of ip header, but in ip_finish_output use (skb->len > ip_skb_dst_mtu(skb)) as judgement, and skb->len include the length of ip header. That cuase some particular applicatoin's udp payload whose length is between (MTU - IP Header) and MTU were framented by ip_fragment even though the rst->dev support UFO feature. Add the length of ip header to length in __ip_append_data to keep consistent conditional judgement as ip_finish_output for ip fragment. Signed-off-by: Zheng Li --- net/ipv4/ip_output.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 877bdb0..12a0149 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c @@ -936,7 +936,7 @@ static int __ip_append_data(struct sock *sk, csummode = CHECKSUM_PARTIAL; cork->length += length; - if (((length > mtu) || (skb && skb_is_gso(skb))) && + if ((((length + fragheaderlen) > mtu) || (skb && skb_is_gso(skb))) && (sk->sk_protocol == IPPROTO_UDP) && (rt->dst.dev->features & NETIF_F_UFO) && !rt->dst.header_len && (sk->sk_type == SOCK_DGRAM) && !sk->sk_no_check_tx) {