From patchwork Tue Jun 28 08:30:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 641409 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 3rdzWx0b5Rz9sCp for ; Tue, 28 Jun 2016 18:30:21 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=NdZLpS6g; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752133AbcF1IaR (ORCPT ); Tue, 28 Jun 2016 04:30:17 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:33953 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751770AbcF1IaP (ORCPT ); Tue, 28 Jun 2016 04:30:15 -0400 Received: by mail-wm0-f66.google.com with SMTP id 187so3787159wmz.1 for ; Tue, 28 Jun 2016 01:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=j8ABwKw2EX5HXqvhhymKtW3AUaYHnBP3YHLj/PPiI9g=; b=NdZLpS6gRUZl6jJIrSIZdKKY91TR0U06XtmXikwrae9HaqNWvZe6/9aH1RUvED8fP1 um6Mq4+r2MDS8Gf/1775qC0iYlds7hZztDWE6W2ylqOknS1xiycZIuH3RnRWw5z/DKdA Y6Zcra9iDInhdD3XAKApRrC6H5+G7CHyaG/UOuKwItDadDUtZgdiY8lBuPAA6dgs5nqf gND1fplvyW4wRAH2N5+Hpk3FIlgycbynaWNS61FpkTpKeLZpCUoBnyTgCL8letcbIyK9 YD5VoXTweSL8WKqanBRXcdAirZgIRCOxEahyy+CGUWqGW42eoM2ZOtotA5bwiGBA7RRV tSOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:subject:from:to:cc:date:mime-version :content-transfer-encoding; bh=j8ABwKw2EX5HXqvhhymKtW3AUaYHnBP3YHLj/PPiI9g=; b=MjNkMmG4gmOvdf6FT8F667bgs5Vyorevds1bkN97KCVPB79TPB1g0UOjWC+Z3n6Q60 wHilrOyL2IHjSQcxjNxGQe22WVhHkcYqRmFdyphS/zrNF5AMrfq9vzo+Vv8CNHltmwK/ MhwR9Mc51tEcypNHzet27q0DmEVYIa86sC9Xu5tfoCmYOEDdmCIGF/mWixufAR3TwSCb DSOenE/eOBQ2OMtcp725U/3u49+4pRJNKwl8EAh3zs2gBde+eLkRZXN/4aJ9OhAmnFBM F/ZuUjhlk0c0WLg+lMapxj2JpDX3qaS/2BOPr8TkZpvuJLimAdkJndlR6gTtZWWhM7D8 S3CQ== X-Gm-Message-State: ALyK8tLa67lsUkKWc2Fzj/BOr8nOfThLxTjoyloWuo4ymMQ96ipMHyIqRR+LaDVvf3M36w== X-Received: by 10.28.36.136 with SMTP id k130mr2133026wmk.4.1467102613804; Tue, 28 Jun 2016 01:30:13 -0700 (PDT) Received: from [130.37.168.100] ([130.37.168.100]) by smtp.googlemail.com with ESMTPSA id bf5sm5348624wjc.12.2016.06.28.01.30.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Jun 2016 01:30:12 -0700 (PDT) Message-ID: <1467102608.6850.196.camel@edumazet-glaptop3.roam.corp.google.com> Subject: [PATCH net-next] net_sched: netem: do not call qdisc_drop() with a NULL skb From: Eric Dumazet To: David Miller Cc: netdev , Dan Carpenter Date: Tue, 28 Jun 2016 10:30:08 +0200 X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Eric Dumazet If skb_unshare() fails, we call qdisc_drop() with a NULL skb, which is no longer supported. Fixes: 520ac30f4551 ("net_sched: drop packets after root qdisc lock is released") Signed-off-by: Eric Dumazet Reported-by: Dan Carpenter --- net/sched/sch_netem.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index ccca8ca4c722c603e8b8e6052eead51243e590b5..6eac3d8800480a4c463ae8d3b78a4fcfeec8165b 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -487,10 +487,14 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, skb = segs; segs = segs->next; - if (!(skb = skb_unshare(skb, GFP_ATOMIC)) || - (skb->ip_summed == CHECKSUM_PARTIAL && - skb_checksum_help(skb))) { - rc = qdisc_drop(skb, sch, to_free); + skb = skb_unshare(skb, GFP_ATOMIC); + if (unlikely(!skb)) { + qdisc_qstats_drop(sch); + goto finish_segs; + } + if (skb->ip_summed == CHECKSUM_PARTIAL && + skb_checksum_help(skb)) { + qdisc_drop(skb, sch, to_free); goto finish_segs; }