From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS, T_DKIMWL_WL_HIGH,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C539C43219 for ; Sat, 4 May 2019 10:30:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 35A59206BB for ; Sat, 4 May 2019 10:30:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556965826; bh=udYxDx6SkG0QLH+YfKbGRDFSV+aYbjGLyoqFuM+tUMc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=q4yAFt4Z3uw2T6se+1RJF95cN45nGGEYSZvL/k2cNIjq4KT8K7I8Qje7y/n2adb5P Hrx57oQb0mG5Mjq4tLpLkVWiXEyqZW9F/viG6FplnhBadThAp7FFAsI6KsCLORau+Y HsUrODAnE0+lJtcjbZHx1zroOd+qeHSwDyu4tJPE= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727510AbfEDKZ7 (ORCPT ); Sat, 4 May 2019 06:25:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:35338 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727504AbfEDKZ7 (ORCPT ); Sat, 4 May 2019 06:25:59 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 360A52086A; Sat, 4 May 2019 10:25:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556965558; bh=udYxDx6SkG0QLH+YfKbGRDFSV+aYbjGLyoqFuM+tUMc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fplRfNNLInmLat2ssGB8t+GJOo7w6vrqnR+que1JGeAVredLoWUrO65GHljvXEXIQ JIonTCsMBPPV33Ncdt3BqLK2m5Uc9ZQdW89ZReC/27lnF0W9YiWHXZ9VZEccEBtXeg CKPj0ZPDgLeQcmhzbOFLlxJi8ATSVobese4Kbpq8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sean Tong , Paolo Abeni , "David S. Miller" Subject: [PATCH 5.0 18/32] udp: fix GRO reception in case of length mismatch Date: Sat, 4 May 2019 12:25:03 +0200 Message-Id: <20190504102453.076769592@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190504102452.523724210@linuxfoundation.org> References: <20190504102452.523724210@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Paolo Abeni [ Upstream commit 21f1b8a6636c4dbde4aa1ec0343f42eaf653ffcc ] Currently, the UDP GRO code path does bad things on some edge conditions - Aggregation can happen even on packet with different lengths. Fix the above by rewriting the 'complete' condition for GRO packets. While at it, note explicitly that we allow merging the first packet per burst below gso_size. Reported-by: Sean Tong Fixes: e20cf8d3f1f7 ("udp: implement GRO for plain UDP sockets.") Signed-off-by: Paolo Abeni Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/ipv4/udp_offload.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) --- a/net/ipv4/udp_offload.c +++ b/net/ipv4/udp_offload.c @@ -377,13 +377,14 @@ static struct sk_buff *udp_gro_receive_s /* Terminate the flow on len mismatch or if it grow "too much". * Under small packet flood GRO count could elsewhere grow a lot - * leading to execessive truesize values + * leading to execessive truesize values. + * On len mismatch merge the first packet shorter than gso_size, + * otherwise complete the GRO packet. */ - if (!skb_gro_receive(p, skb) && + if (uh->len > uh2->len || skb_gro_receive(p, skb) || + uh->len != uh2->len || NAPI_GRO_CB(p)->count >= UDP_GRO_CNT_MAX) pp = p; - else if (uh->len != uh2->len) - pp = p; return pp; }