Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp8557146ybl; Thu, 16 Jan 2020 19:32:00 -0800 (PST) X-Google-Smtp-Source: APXvYqxYwqk1Eo0Maj+MJEm0P7OdZJ2orYqTCz3/FLER2RVobr9tKrNWb5W1BJfMVxd2usQLQ2pK X-Received: by 2002:a9d:560f:: with SMTP id e15mr4643010oti.301.1579231920209; Thu, 16 Jan 2020 19:32:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579231920; cv=none; d=google.com; s=arc-20160816; b=SOzRVJTSnzLOR5pDITjabxOfr//nyj29p7UiHYDGPVCmftMdwyAHgamVvcc6XXSzXB OntwFFmRIXw/CYQKVD+rI61NdgnKshas8+x86AN5wOJe0jl8is5I0GgN2HZ2ULbde9/u CbZXcpM/yz6bFEayCv6RT+CZSj04POyjBNCGJzqmV3iZB2V/Eog5rBPPMrCrHkQxGWtu mVTdkACzmmBlI3CK608GKrVfnqGBZr/h0rEJNMVbNMFHFB7ltOJjDUivP7VL+D2/7QOD d1zj86sufnbrHzVnigfdu0DAiwbidL/aSfm+CMgyKTkE611QzXs2uah+E5Y0roDW1CHJ k4Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=q2NQibQ0uzXJQwIydDVmBn7E4E5GwQF4t/aNQ3cp8Hw=; b=Iwz8bEgs7HtOD6lxggpWMLarqFm87kW7EkdjL02XG+PxAyKP2QplKF23Kh1C1dZvOi RO3eAwDMtN5P+hGDmE0SQD0cw/8w52d4ERW4QDGdbhDNttdc0Hm63eH26Z71WCxDga0P xIvtqVXhTWxr/tOnImc7+eVdqdUB/Q4CoKfuw0q4SciA7U7grM/b2kpLn9moMxeMSdYB ra2aduLPib4f0KkNISub90ABMCVXQ4RRdme1CJrCk/fYGoVQ3Atx5MEmBwKFut0zMoQr IVxWy0B7hulNCEaz/XoFjVlO3iG6FqdMq0Qr/o9PvGXAL3jZBC/sAWqrgIko40n4yk65 sP3Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zGjfxbpq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q9si12443370oij.125.2020.01.16.19.31.48; Thu, 16 Jan 2020 19:32:00 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=zGjfxbpq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391072AbgAPXjv (ORCPT + 99 others); Thu, 16 Jan 2020 18:39:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:59924 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389646AbgAPX1s (ORCPT ); Thu, 16 Jan 2020 18:27:48 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CD1B0206D9; Thu, 16 Jan 2020 23:27:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1579217267; bh=/rnnCLUtsDSujem08bDuUV6hvzEqVGJfSuKukWLi4i0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zGjfxbpq7XAAGOtTfMHlJrQhprF7xD1urt0/KVuB1U9wVxVsqIRRFx4Sw0LmEdez7 l9DKOYxuHhOMn36XimbDrpeQH6XuISNZSGtsGhzAO0xcB8N9/hSxr2ZD/kaErzAyEs wZEmsSb38ch5aPBJzxy2SAhtQVddmmMQAO6G+o7k= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Navid Emamdoost , Luca Coelho , Ben Hutchings Subject: [PATCH 4.19 13/84] iwlwifi: pcie: fix memory leaks in iwl_pcie_ctxt_info_gen3_init Date: Fri, 17 Jan 2020 00:17:47 +0100 Message-Id: <20200116231715.177276544@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200116231713.087649517@linuxfoundation.org> References: <20200116231713.087649517@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Navid Emamdoost commit 0f4f199443faca715523b0659aa536251d8b978f upstream. In iwl_pcie_ctxt_info_gen3_init there are cases that the allocated dma memory is leaked in case of error. DMA memories prph_scratch, prph_info, and ctxt_info_gen3 are allocated and initialized to be later assigned to trans_pcie. But in any error case before such assignment the allocated memories should be released. First of such error cases happens when iwl_pcie_init_fw_sec fails. Current implementation correctly releases prph_scratch. But in two sunsequent error cases where dma_alloc_coherent may fail, such releases are missing. This commit adds release for prph_scratch when allocation for prph_info fails, and adds releases for prph_scratch and prph_info when allocation for ctxt_info_gen3 fails. Fixes: 2ee824026288 ("iwlwifi: pcie: support context information for 22560 devices") Signed-off-by: Navid Emamdoost Signed-off-by: Luca Coelho Signed-off-by: Ben Hutchings Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c | 36 ++++++++++----- 1 file changed, 25 insertions(+), 11 deletions(-) --- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c @@ -102,13 +102,9 @@ int iwl_pcie_ctxt_info_gen3_init(struct /* allocate ucode sections in dram and set addresses */ ret = iwl_pcie_init_fw_sec(trans, fw, &prph_scratch->dram); - if (ret) { - dma_free_coherent(trans->dev, - sizeof(*prph_scratch), - prph_scratch, - trans_pcie->prph_scratch_dma_addr); - return ret; - } + if (ret) + goto err_free_prph_scratch; + /* Allocate prph information * currently we don't assign to the prph info anything, but it would get @@ -116,16 +112,20 @@ int iwl_pcie_ctxt_info_gen3_init(struct prph_info = dma_alloc_coherent(trans->dev, sizeof(*prph_info), &trans_pcie->prph_info_dma_addr, GFP_KERNEL); - if (!prph_info) - return -ENOMEM; + if (!prph_info) { + ret = -ENOMEM; + goto err_free_prph_scratch; + } /* Allocate context info */ ctxt_info_gen3 = dma_alloc_coherent(trans->dev, sizeof(*ctxt_info_gen3), &trans_pcie->ctxt_info_dma_addr, GFP_KERNEL); - if (!ctxt_info_gen3) - return -ENOMEM; + if (!ctxt_info_gen3) { + ret = -ENOMEM; + goto err_free_prph_info; + } ctxt_info_gen3->prph_info_base_addr = cpu_to_le64(trans_pcie->prph_info_dma_addr); @@ -176,6 +176,20 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_set_bit(trans, CSR_GP_CNTRL, CSR_AUTO_FUNC_INIT); return 0; + +err_free_prph_info: + dma_free_coherent(trans->dev, + sizeof(*prph_info), + prph_info, + trans_pcie->prph_info_dma_addr); + +err_free_prph_scratch: + dma_free_coherent(trans->dev, + sizeof(*prph_scratch), + prph_scratch, + trans_pcie->prph_scratch_dma_addr); + return ret; + } void iwl_pcie_ctxt_info_gen3_free(struct iwl_trans *trans)