Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8323175ybl; Thu, 16 Jan 2020 14:37:07 -0800 (PST) X-Google-Smtp-Source: APXvYqyiQQDYhZii1/W3Nj2v48wJKiVW1UMlkb0nVLyOHA2npBE+HHKSwe9MP9/k9YdMYjCSNHle X-Received: by 2002:a9d:5c1:: with SMTP id 59mr3997561otd.192.1579214227151; Thu, 16 Jan 2020 14:37:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579214227; cv=none; d=google.com; s=arc-20160816; b=eq6ogdBePIH3DT1hynYZfUmNooyPdUwR0joRFiLqS0ZhE2Zvw85puNXAPJjAWDQPZG 0+CYnHY7ZjuK1aqsSScl/0dEv5BTikvCVKfIeFCznfBkNG3l6ouKuH0i27XFA4tk0Lvq ZbxeWOIZ9/550FPCNNZgT0l6IuXrgN/Pt0Ho8D85bIcANV47naIgxt7C6NXibJ4zPJoo yb5jrS1ROu3h9+kv9uPlL1QKpmOLVjPhsTvbc8WBo7VuKFt6d/0Ng1vv5sOlthWvldtb FfJq0xT0OyHuSGN4cPaCiltUzdfNZuh5zYDRUFIAB0DeByYaSMG4EADV6H5+0QqPepEH B53w== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8xeB9IpWf49SLjU8BCIa5rSBCOyN4beirUO6W3S0eF8=; b=bjmKGln30HseGmD/1Y+RmyitTRdLgGcqxmYlNZ0wUqgabHhv9jwfH4vYp6CLFDS6W9 nWA40igRBvbUDZnt2+XplrrAS1DCzvYVIjeQ50JR3Uo1iV3e3aOvnv+LopF/kJSDd30l tvPANSk2EJRFF237VjMbiIWCtvynnbMRQJLbRtp1EQB/QWud5KZ7V+B9Pq1XBiGhc11m v2HKtw5jbEPt+QVXP70LCE+yeejUNRDUfe8578lR3lfg3NZPBkC/tFDyfU+JMPPhNyEk iJ+poasA+2S4OI9ZxaBBiBi3YOkl47nO+dkQ1SfNcqRvsZ+hwVzHQAzHn9Y/xuQKH/Ze Kijw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=uV6UiWfw; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f204si10725313oia.43.2020.01.16.14.36.53; Thu, 16 Jan 2020 14:37:07 -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=uV6UiWfw; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2393755AbgAPSC1 (ORCPT + 99 others); Thu, 16 Jan 2020 13:02:27 -0500 Received: from mail.kernel.org ([198.145.29.99]:58664 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405586AbgAPRlI (ORCPT ); Thu, 16 Jan 2020 12:41:08 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 6AC8C2467C; Thu, 16 Jan 2020 17:41:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579196467; bh=TFkuW/yaASAW3/VEDHwgT7QVjjml6kxRrZWryGjEup4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uV6UiWfwQFM0whXK4ZEgTuoyEfPnYzrek+ij5So3HVsni/Cit/PWa5F+yJ049p+AI otgGEMLuIXmxWOpJxRc5tA7Peuh7CU+GaRKylVJc0E0QyUiAQothhzHY5tgyC6qRzt KxMN68Q6mvB25zxNBu8QBqh9kiTBVkPdUvCxFUqo= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Jakub Kicinski , kbuild test robot , Dan Carpenter , Ben Hutchings , Simon Horman , "David S . Miller" , Sasha Levin , netem@lists.linux-foundation.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 219/251] net: netem: fix error path for corrupted GSO frames Date: Thu, 16 Jan 2020 12:36:08 -0500 Message-Id: <20200116173641.22137-179-sashal@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200116173641.22137-1-sashal@kernel.org> References: <20200116173641.22137-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore 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 308d92491757..11c4c93f5ded 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -510,6 +510,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; } @@ -586,9 +587,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; @@ -605,7 +607,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, } 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