Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp3032397pxb; Mon, 18 Oct 2021 07:00:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzSL4fiKFA9oiEd2cpoQjpH5KoGXnWnN0GEsabt4Ck4h2LrG8aU7s7609Dj62ZzAqcKN5WY X-Received: by 2002:a17:90a:b112:: with SMTP id z18mr32951579pjq.198.1634565603688; Mon, 18 Oct 2021 07:00:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634565603; cv=none; d=google.com; s=arc-20160816; b=pcHaYrfdy7+X2OgTzgYgLUzccyK5tJ7a7MSaF0YYbfUK5pLL2yVNNR7deNm1UibqUB fdaPhfx1M2bADk6Ikp6eeE8la2ITtYuSCIYFUXPlwL8TfI9C6LcRaXYn0PwkBjsalLQK QBZLGdslV9OWkfelp0pNjm7nmSp5YEuVWHUrxtmfqTfp5ppMTM3oeSBZW22tTaRAYdOz Epp/yqtaczXqFjfNyk2NVLf1z0QPf4lMOJQ0Y2IW5uiIXcVzWkMEkwP/qIcsrQ2Sky+L n4XeD2hlr2wa5baFTZyOAktjZGR5dp0gac90BJ+62CTb2QRgZPJVbYP2P6lwY0uXIFKL 3I8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=n7DEIVPu9ihoM6uvS8Ywpewtz/NqVv6pp7g7CFCRrA0=; b=lx6idAOaE+aPvFRoUFC2OUJt14E6VH4PIAeqBjc8IKr3vKzPMmxUs0WNUY1W0LZShG lgPQRr7GjaJd1LN12f0EkfjJ3re6JjXARK9+jT2vpqVaee5D5rYMdaw0huG8Wg2IIQCW TsnAs/hR2HWiPNTCZH4YF3Ohbaazwm+FStq2T0Nnk/5ASeEAV2fbPDAUPCxvbtMzOiev OS5JjQo9RwbNA+jfewxbl6JzyAvlq1Eipki3WGwTwloj6VtWaBApL1iVM9br2xobDE/J NiawvGnJi9LqxWMUlptc28Rc2NYKTI0KbrG+FWECOZqppYbXZuuMNoCNU/8jnZUzNaml J2YQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GfGn8KGx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bc12si18812235plb.114.2021.10.18.06.59.49; Mon, 18 Oct 2021 07:00:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=GfGn8KGx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232891AbhJROA7 (ORCPT + 99 others); Mon, 18 Oct 2021 10:00:59 -0400 Received: from mail.kernel.org ([198.145.29.99]:39032 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233555AbhJRN7B (ORCPT ); Mon, 18 Oct 2021 09:59:01 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 9F6AD61440; Mon, 18 Oct 2021 13:41:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1634564497; bh=u9El7f3gdKdEjCXKeoYIWKP8przCpQMoxZYG1deZ2Xg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GfGn8KGxyDMX7As5fgZznzg7abxv7A10H+x9OzVuuIEOZGNtXjWeocyOVUF8He8kS M0iLTeDOtHo98bIeH8PgK3CEMz99jYPOUw4uvInxHZvNbc368NdlMyfqdjRVM9TwFA PAyZQkN1/jDXD9VKLpzb4eirVT7TJyAgYyP39qsc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Valentine Fatiev , Moshe Shemesh , Saeed Mahameed Subject: [PATCH 5.14 104/151] net/mlx5e: Fix memory leak in mlx5_core_destroy_cq() error path Date: Mon, 18 Oct 2021 15:24:43 +0200 Message-Id: <20211018132344.054757337@linuxfoundation.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211018132340.682786018@linuxfoundation.org> References: <20211018132340.682786018@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Valentine Fatiev commit 94b960b9deffc02fc0747afc01f72cc62ab099e3 upstream. Prior to this patch in case mlx5_core_destroy_cq() failed it returns without completing all destroy operations and that leads to memory leak. Instead, complete the destroy flow before return error. Also move mlx5_debug_cq_remove() to the beginning of mlx5_core_destroy_cq() to be symmetrical with mlx5_core_create_cq(). kmemleak complains on: unreferenced object 0xc000000038625100 (size 64): comm "ethtool", pid 28301, jiffies 4298062946 (age 785.380s) hex dump (first 32 bytes): 60 01 48 94 00 00 00 c0 b8 05 34 c3 00 00 00 c0 `.H.......4..... 02 00 00 00 00 00 00 00 00 db 7d c1 00 00 00 c0 ..........}..... backtrace: [<000000009e8643cb>] add_res_tree+0xd0/0x270 [mlx5_core] [<00000000e7cb8e6c>] mlx5_debug_cq_add+0x5c/0xc0 [mlx5_core] [<000000002a12918f>] mlx5_core_create_cq+0x1d0/0x2d0 [mlx5_core] [<00000000cef0a696>] mlx5e_create_cq+0x210/0x3f0 [mlx5_core] [<000000009c642c26>] mlx5e_open_cq+0xb4/0x130 [mlx5_core] [<0000000058dfa578>] mlx5e_ptp_open+0x7f4/0xe10 [mlx5_core] [<0000000081839561>] mlx5e_open_channels+0x9cc/0x13e0 [mlx5_core] [<0000000009cf05d4>] mlx5e_switch_priv_channels+0xa4/0x230 [mlx5_core] [<0000000042bbedd8>] mlx5e_safe_switch_params+0x14c/0x300 [mlx5_core] [<0000000004bc9db8>] set_pflag_tx_port_ts+0x9c/0x160 [mlx5_core] [<00000000a0553443>] mlx5e_set_priv_flags+0xd0/0x1b0 [mlx5_core] [<00000000a8f3d84b>] ethnl_set_privflags+0x234/0x2d0 [<00000000fd27f27c>] genl_family_rcv_msg_doit+0x108/0x1d0 [<00000000f495e2bb>] genl_family_rcv_msg+0xe4/0x1f0 [<00000000646c5c2c>] genl_rcv_msg+0x78/0x120 [<00000000d53e384e>] netlink_rcv_skb+0x74/0x1a0 Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters") Signed-off-by: Valentine Fatiev Reviewed-by: Moshe Shemesh Signed-off-by: Saeed Mahameed Signed-off-by: Greg Kroah-Hartman --- drivers/net/ethernet/mellanox/mlx5/core/cq.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) --- a/drivers/net/ethernet/mellanox/mlx5/core/cq.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/cq.c @@ -154,6 +154,8 @@ int mlx5_core_destroy_cq(struct mlx5_cor u32 in[MLX5_ST_SZ_DW(destroy_cq_in)] = {}; int err; + mlx5_debug_cq_remove(dev, cq); + mlx5_eq_del_cq(mlx5_get_async_eq(dev), cq); mlx5_eq_del_cq(&cq->eq->core, cq); @@ -161,16 +163,13 @@ int mlx5_core_destroy_cq(struct mlx5_cor MLX5_SET(destroy_cq_in, in, cqn, cq->cqn); MLX5_SET(destroy_cq_in, in, uid, cq->uid); err = mlx5_cmd_exec_in(dev, destroy_cq, in); - if (err) - return err; synchronize_irq(cq->irqn); - mlx5_debug_cq_remove(dev, cq); mlx5_cq_put(cq); wait_for_completion(&cq->free); - return 0; + return err; } EXPORT_SYMBOL(mlx5_core_destroy_cq);