Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp692398ybl; Fri, 24 Jan 2020 07:52:20 -0800 (PST) X-Google-Smtp-Source: APXvYqy7DjmBiGYaH1OmjJ13uZBqlc1wbG3QYlTNSzcnaE8olJAUxnlU0jHhYR5vwnAnQAhTMjh/ X-Received: by 2002:aca:bac3:: with SMTP id k186mr2488376oif.19.1579881140818; Fri, 24 Jan 2020 07:52:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579881140; cv=none; d=google.com; s=arc-20160816; b=LnFwhRygxM3k4vX7mgyQmxKxvYUmGUznjxgm7MLF4rLyUChnZ0thFj/7/D9BgKxqVx ujN8Y5QKZ+RzW0QL4/qbbgpRH0dAtvdS0e6QZ5QHqgluqKd5tMDwHjs4tHiIqLC8beMh ODEIxn3DjP0C+CtJMHtnOLFKSKUJiNbtOTZGEneJ2Bvtgf1ay0zPBxQ1ddajpxi/wNez xrvYzJFWWHpZWPckqTbjMNaWriY9nfuMtJyg+bLK/q1H7sUayxcbQbCkmdG3wJ+Mmwk7 3r/dNUwTSPNlybYUIZsU0TtowHb6bD1RYo0FqYnrzb9b/XM+IPhZGdeCeRrS8zRw13dB lraw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Y+4+9lIHKzs3myEyZG0xwTtyhT1gKtcmOcpdisKfBQQ=; b=xwi6ki7xXIwLEXlQWiwnV+mU6xKeVus2oTL02i8MXd00W/qcw3rPUcxhxWe4F9myg0 P2UtUdOv3OvrDLbhywTnl1XjuKdF2pDzjxsNDsTy27CWw1qcjpPECRrrTRlQjLPvASdN ashnwNcI+PVYs/x8zRYTaYMkTFeRCU6Ifv8M7vDF89qSIVnvblTAXC0hdJ9I/4nvJXMz yENqAqPdL6bMUPgZu4snyXHaBH4VJ1zF/v3O8GuaBU3x6tgDRY9swqZ+Xin8+DQ8iF0C fb1rbLoUX8ns1GEpY5XVPFvQW/rnRWbGmLl+yFkEgceGWjNpThYewyMb6zuu2O6MxCEj NOOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=otaDPVhU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l14si3104514otk.225.2020.01.24.07.52.08; Fri, 24 Jan 2020 07:52:20 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=otaDPVhU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389183AbgAXKGo (ORCPT + 99 others); Fri, 24 Jan 2020 05:06:44 -0500 Received: from mail.kernel.org ([198.145.29.99]:43236 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730766AbgAXKGn (ORCPT ); Fri, 24 Jan 2020 05:06:43 -0500 Received: from localhost (unknown [145.15.244.15]) (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 31CA0206F0; Fri, 24 Jan 2020 10:06:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579860402; bh=0QG0zH6wWOR7JZVKQGlb5ilL0eSMs4NI5aN7KMm81Gc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=otaDPVhUfKAnkJUNMlWHcnsyplj3Ur0/ACRpDAxOMRX/ZRpwKRd6Z3ClpZOmJ6M1h eEhVawpWD5Pcg9lmlI0fDf1mDAVB28LziHB62dwhmek6BHu5n5wC1ZWovcE9Pr/VYh UW6DVZkmOG2kK2/4C7u37X+Ex4R9YJU3UKwXe7rc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, kbuild test robot , Dan Carpenter , Ben Hutchings , Jakub Kicinski , Simon Horman , "David S. Miller" , Sasha Levin Subject: [PATCH 4.14 327/343] net: netem: fix error path for corrupted GSO frames Date: Fri, 24 Jan 2020 10:32:25 +0100 Message-Id: <20200124093002.831762846@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200124092919.490687572@linuxfoundation.org> References: <20200124092919.490687572@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jakub Kicinski [ Upstream commit a7fa12d15855904aff1716e1fc723c03ba38c5cc ] To corrupt a GSO frame we first perform segmentation. We then proceed using the first segment instead of the full GSO skb and requeue the rest of the segments as separate packets. If there are any issues with processing the first segment we still want to process the rest, therefore we jump to the finish_segs label. Commit 177b8007463c ("net: netem: fix backlog accounting for corrupted GSO frames") started using the pointer to the first segment in the "rest of segments processing", but as mentioned above the first segment may had already been freed at this point. Backlog corrections for parent qdiscs have to be adjusted. Fixes: 177b8007463c ("net: netem: fix backlog accounting for corrupted GSO frames") Reported-by: kbuild test robot Reported-by: Dan Carpenter Reported-by: Ben Hutchings Signed-off-by: Jakub Kicinski Reviewed-by: Simon Horman Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- net/sched/sch_netem.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index ede0a24e67eb8..64c3cfa357363 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -504,6 +504,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, if (skb->ip_summed == CHECKSUM_PARTIAL && skb_checksum_help(skb)) { qdisc_drop(skb, sch, to_free); + skb = NULL; goto finish_segs; } @@ -580,9 +581,10 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, finish_segs: if (segs) { unsigned int len, last_len; - int nb = 0; + int nb; - len = skb->len; + len = skb ? skb->len : 0; + nb = skb ? 1 : 0; while (segs) { skb2 = segs->next; @@ -599,7 +601,8 @@ finish_segs: } segs = skb2; } - qdisc_tree_reduce_backlog(sch, -nb, prev_len - len); + /* Parent qdiscs accounted for 1 skb of size @prev_len */ + qdisc_tree_reduce_backlog(sch, -(nb - 1), -(len - prev_len)); } return NET_XMIT_SUCCESS; } -- 2.20.1