From patchwork Wed Aug 30 09:49:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Aleksandrov X-Patchwork-Id: 807541 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b="T3nbMwA2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xj11r4Zc5z9sNn for ; Wed, 30 Aug 2017 19:49:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751942AbdH3Jtd (ORCPT ); Wed, 30 Aug 2017 05:49:33 -0400 Received: from mail-wr0-f171.google.com ([209.85.128.171]:37499 "EHLO mail-wr0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751316AbdH3Jt3 (ORCPT ); Wed, 30 Aug 2017 05:49:29 -0400 Received: by mail-wr0-f171.google.com with SMTP id k9so4663539wre.4 for ; Wed, 30 Aug 2017 02:49:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=2FRLpb2I2CEizxr4roHcSVLHhbu1f/VSygIDGxZynqM=; b=T3nbMwA27C47GRP+Zfc+8p4J9QwBbJM5Y2xuFEipAv9kRoDOQYNCFXAigY8DUTDiu5 wtuEimUE1lo5TgMqHxa/VptLJxU2+01GIIYbfF/tZX26uSbU8hKCl4rym0iU71tOPhbN PipiRkfRxJeUM/C7oqWDaMMNx+yPsG50mRibs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=2FRLpb2I2CEizxr4roHcSVLHhbu1f/VSygIDGxZynqM=; b=J4OSHSjEuOTe++/zheTBjgWNR1SViGNWGRK78IFQgZRT2LtL9mMbD++iSUwc8zJpiL XZZYsqlR/vF1KRSv4dItNUijizhhnuylWDzSCiS/+pPYmkhe1QipDYj1miGCiayE7KSF 24lTNGlMPeiEtGRPViq6KOw6TPbrS/l8JqNqofB4bmd+7lBDDYvkVrkY0xb4T6w1Wc+T si5EaFcAq1CGWrNjL1B0nWPBtHtyvt/V9GeNcarxGV1NGxOgHwiMQzuQTdtsh215jbXy QarY8S4wnvuhh/ToJZVEQO7X64PG0IOfHsH3VnTvkikQzuznDJQk4f5AqDSQCcc0atNr pzQw== X-Gm-Message-State: AHYfb5huS9Hw/jeodGwgOWAKcmdfKtbB9CP445cZoZkNIXThdVvluHkh aejs1cqqMEvF4V5390A= X-Received: by 10.223.164.90 with SMTP id e26mr658238wra.62.1504086567779; Wed, 30 Aug 2017 02:49:27 -0700 (PDT) Received: from debil.mediahub-bg.com (46-10-142-144.ip.btc-net.bg. [46.10.142.144]) by smtp.gmail.com with ESMTPSA id o206sm1113294wmo.10.2017.08.30.02.49.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 30 Aug 2017 02:49:26 -0700 (PDT) From: Nikolay Aleksandrov To: netdev@vger.kernel.org Cc: edumazet@google.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, roopa@cumulusnetworks.com, Nikolay Aleksandrov Subject: [PATCH net 6/9] sch_fq_codel: avoid double free on init failure Date: Wed, 30 Aug 2017 12:49:02 +0300 Message-Id: <1504086545-7777-7-git-send-email-nikolay@cumulusnetworks.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1504086545-7777-1-git-send-email-nikolay@cumulusnetworks.com> References: <1504086545-7777-1-git-send-email-nikolay@cumulusnetworks.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org It is very unlikely to happen but the backlogs memory allocation could fail and will free q->flows, but then ->destroy() will free q->flows too. For correctness remove the first free and let ->destroy clean up. Fixes: 87b60cfacf9f ("net_sched: fix error recovery at qdisc creation") Signed-off-by: Nikolay Aleksandrov --- net/sched/sch_fq_codel.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 337f2d6d81e4..2c0c05f2cc34 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c @@ -491,10 +491,8 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt) if (!q->flows) return -ENOMEM; q->backlogs = kvzalloc(q->flows_cnt * sizeof(u32), GFP_KERNEL); - if (!q->backlogs) { - kvfree(q->flows); + if (!q->backlogs) return -ENOMEM; - } for (i = 0; i < q->flows_cnt; i++) { struct fq_codel_flow *flow = q->flows + i;