From patchwork Wed Aug 24 16:39:02 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 662368 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 3sKCyV4h5Nz9ryk for ; Thu, 25 Aug 2016 02:52:02 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=BTwB7sZs; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757335AbcHXQvm (ORCPT ); Wed, 24 Aug 2016 12:51:42 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:35810 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755653AbcHXQvk (ORCPT ); Wed, 24 Aug 2016 12:51:40 -0400 Received: by mail-pf0-f195.google.com with SMTP id h186so1520492pfg.2 for ; Wed, 24 Aug 2016 09:51:18 -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=XM2+P8Tqam8nUwBhdae+wn+7Fx6gmtjmMpj7Q5wU6yY=; b=BTwB7sZsT+3MycXR4u5tIdwqIKDvUJzVwVz3dAcZa+kG3VYV5JudLXYtkFLGhX7nPt eoAtEl1RF0gTLgKTzHDT9sELQQIXw5b27ciJsv0XrDYqmBkXW45E6Lt0+VfQDJnpGssZ qM4sstuWjDNsyZWq+W82W8YjIfQyqWC9OzzoFWXk8aAM3QgHZkM1nT+ZAw1BPHIzf4tr lPV/zJumy6YxeE9kHXqoysQmA07SLbz6krxZqXMDaeWEE/qVJ8kA4YylBegHs58yvqfA p+mjknQNmZ/PrW/10OdhNWmvQhA+fXgeMVE/d6KS9/UvxO71rwbftZAeFu5R/Ssl/cYw fqsQ== 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=XM2+P8Tqam8nUwBhdae+wn+7Fx6gmtjmMpj7Q5wU6yY=; b=QKSxz0PaSeVOjr2K+CTak6ueMm+XvYCk7+4sQ649KaTweksTapIphMOmop+i0TU27F 3g2xF8+JNnCTFfu1PzpFSkvx70b3ovKBj0wH+8puCPft/BuLF7o2JVAF3uGVWSt4Ka41 qx5ysXxFq6JhqzETxE/2s/CAUTdrM/SfKpi2BAVrZvYrw0mBT3Gaanpz2wxfcPslKgwD GQ4c7pyXZ+eft80B8KoZSFeg8QVQbzcwzzKfis6AoBbvxwLjZvUGN2uSeT6R6XCkaKGo wovtSdazlc0b2cEcTSkgkYP+3HO0ljqP7h5Q/l49r2/F9VGzQJObChn5tpraDQKdPMbu +Kuw== X-Gm-Message-State: AE9vXwM2pteYExtOaf/z1ulRRn9f7PWSy6Cn0ywE0My4d9/J8T9FQbiNprZ3VCMdiL9N+Q== X-Received: by 10.98.18.221 with SMTP id 90mr7393259pfs.3.1472056743580; Wed, 24 Aug 2016 09:39:03 -0700 (PDT) Received: from ?IPv6:2620:0:1000:1704:75af:db08:9c35:4854? ([2620:0:1000:1704:75af:db08:9c35:4854]) by smtp.googlemail.com with ESMTPSA id v124sm14885904pfb.14.2016.08.24.09.39.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Aug 2016 09:39:03 -0700 (PDT) Message-ID: <1472056742.14381.93.camel@edumazet-glaptop3.roam.corp.google.com> Subject: [PATCH net] qdisc: fix a module refcount leak in qdisc_create_dflt() From: Eric Dumazet To: David Miller Cc: netdev , John Fastabend , stephen hemminger , Jamal Hadi Salim Date: Wed, 24 Aug 2016 09:39:02 -0700 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 Should qdisc_alloc() fail, we must release the module refcount we got right before. Fixes: 6da7c8fcbcbd ("qdisc: allow setting default queuing discipline") Signed-off-by: Eric Dumazet Acked-by: John Fastabend Acked-by: John Fastabend --- net/sched/sch_generic.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index e95b67cd5718..657c13362b19 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -643,18 +643,19 @@ struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue, struct Qdisc *sch; if (!try_module_get(ops->owner)) - goto errout; + return NULL; sch = qdisc_alloc(dev_queue, ops); - if (IS_ERR(sch)) - goto errout; + if (IS_ERR(sch)) { + module_put(ops->owner); + return NULL; + } sch->parent = parentid; if (!ops->init || ops->init(sch, NULL) == 0) return sch; qdisc_destroy(sch); -errout: return NULL; } EXPORT_SYMBOL(qdisc_create_dflt);