Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp3022833pxb; Mon, 18 Oct 2021 06:47:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyW6O7pxRoE96H2A82e28DAqbsJlmxUqcLiI+uowAFwnxUj2Vk8itukXSbBLNC3qR2r30G5 X-Received: by 2002:a63:7406:: with SMTP id p6mr15615713pgc.246.1634564872210; Mon, 18 Oct 2021 06:47:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634564872; cv=none; d=google.com; s=arc-20160816; b=VNrpZGjMP3I8U/QA5jK0/egmWkGlpWsTDF0bO6o7/x8YRd67sd9yCh5DaYPHw+r1I+ iX3h3oXAvw2t7YqoL5zhhj2sAFOP/m/DTLZ/VUuBxwSg+AV6aG3HfYkY3bhSHL9WMrU/ Jx4vanlog+Pfxzx5TF4pa1XF6HRGtmswLKqyYG70VlMQa9RVyJNLIDvDWfxb/QPZwTAM hhXA5Sh0Y/6hSqzClar14fg+aUTBM0MVtoE/e/u+lPIOGH3+ZRwSvbVUnUqaCRtTmWeF OtLDkTbCGg71m77K34BinDYWHYN5dzm0oMAEfTdWERxtSaI3MvO8Upd4VFlf2kqySOAX 7xcw== 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=tnwYWZb6BGYqBknlB4xxF/67cZWpTLss7+ODJAqDbdR5mcuqff8p4abiA+QXwNnj9n TCa/E3ziwqYWvZv8FpTZriOlp0ynZA3upFXl7gxY8DS6CBs6psDv3amjzw8DYdAhX9rR ZEGWNi4UuO65aglGDk+aJOri2dGTf33ZAE5SWTvIqAlSIYUKENIBPJYE8f22y94u/wjn 8spJhfS6p7ltH9iGAUB6H583/5C9cwaXs5WziqzoeY6d0A35EgItMrVzBxX2lv7oIc9+ jX3iAWjvlAM5V2r5l5DRMdrZL7L8HMNUORPHU6HIA3w7+R6MV52mAlyMF0nDHgVEeac4 zQ8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=mPDQC+Im; 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 pj9si32146105pjb.70.2021.10.18.06.47.39; Mon, 18 Oct 2021 06:47:52 -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=mPDQC+Im; 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 S233357AbhJRNrZ (ORCPT + 99 others); Mon, 18 Oct 2021 09:47:25 -0400 Received: from mail.kernel.org ([198.145.29.99]:40940 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233469AbhJRNo7 (ORCPT ); Mon, 18 Oct 2021 09:44:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 74DB16152B; Mon, 18 Oct 2021 13:35:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1634564123; bh=u9El7f3gdKdEjCXKeoYIWKP8przCpQMoxZYG1deZ2Xg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mPDQC+Imf3FpBo/LnV8EErFfqT0uprtgRYLfRyHnwe3s35sFNZdcNGkE7sY22/nQO MspCT9P7DkMfz74hXJL/JU7Qp8B0yUiEXQEhruuVW8REz+OZmJy/0mulj7WcpjowZ3 otTFXgCgDI94mkcutugAzuzuCXWldU6EwFySDzo4= 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.10 072/103] net/mlx5e: Fix memory leak in mlx5_core_destroy_cq() error path Date: Mon, 18 Oct 2021 15:24:48 +0200 Message-Id: <20211018132337.164155749@linuxfoundation.org> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211018132334.702559133@linuxfoundation.org> References: <20211018132334.702559133@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);