Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp7497657pxb; Thu, 18 Feb 2021 11:37:15 -0800 (PST) X-Google-Smtp-Source: ABdhPJySwQFJG2Q86pSrkejHxDsx41QavQaydaMHSS3t0547srR/CYulIA2C9ORPQ7V4tNhQMET7 X-Received: by 2002:a17:906:1944:: with SMTP id b4mr5472556eje.342.1613677035289; Thu, 18 Feb 2021 11:37:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1613677035; cv=none; d=google.com; s=arc-20160816; b=i/x8zlOrMPFNgUCgD6/0KWN3aB7KqgILHksCh4a09PAK8OzIBIhjLPz4DicHYnsdtA c1PW6iPW6RV04Kb08cfea1/nwn1mpJ0ERa01ouYE8Q7KeFXjq/6+pFpwkjUMHSKAyNuk TVH2RMh0Sef1rAs8lIX5hP7heRBWT/ImMJmo1Z+8EIxtmM47J4HtlhGWMEYjhFyPfHCL CTfazi9v7qxF3Y+3sDfkRYqWCRCUhaC+hX9VVUHh5cHixiYJk3tM3bJAJYKQvxlJAnFq wsTb4MoQxq0SXEYCNE5EuxSIPhf1QE3MKRuVrXA9+kmYNk4ERnFzuQ5xM57Q4YwAC6Ec 4tQQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:references:in-reply-to :message-id:date:subject:to:from:dkim-signature; bh=DCEH5KcG8pf7cP7cU3x33Dh9xM5r8as/X5HO4xG/hO4=; b=PSLXArC/cpZTPSJkevklIH4Wze9+KqduBjWtBliPglAZN1AIucRxKD1SpyobvKxAZT x6z78QK8AGZwS7W5Fi7XUsHd5LQrYKQdNzEG8POo+GfV7eA7Tvhow+C6wf8qkl77H9O/ To4tagzr3Pm1Dm2HGNe0KnWx3Vo4PwqyPV3LtLjp3WBoeG7/vkOOebikZFmRPh3hLXb8 alxAf0pQjGTOCGyLVZJjPhigLgSQJQtRAPRnwUp2kX8PXGl37tNVD5IItzV0cTl6kwMw qYduJKz8qWi4BNQrrsCO82BR7rkLNZ+CeZGX8jSY1pUXGsgV6wqiaoDTVXD+jPxVrKkl V7BQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@synopsys.com header.s=mail header.b=R4Vmyim2; 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=synopsys.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dx23si4323480ejb.113.2021.02.18.11.36.51; Thu, 18 Feb 2021 11:37:15 -0800 (PST) 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=@synopsys.com header.s=mail header.b=R4Vmyim2; 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=synopsys.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230257AbhBRTgI (ORCPT + 99 others); Thu, 18 Feb 2021 14:36:08 -0500 Received: from smtprelay-out1.synopsys.com ([149.117.73.133]:33198 "EHLO smtprelay-out1.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233725AbhBRTFl (ORCPT ); Thu, 18 Feb 2021 14:05:41 -0500 Received: from mailhost.synopsys.com (mdc-mailhost2.synopsys.com [10.225.0.210]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 6DC3F40395; Thu, 18 Feb 2021 19:04:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=synopsys.com; s=mail; t=1613675070; bh=/Xl/Guy98nT3w8bs5KM0QdtNcEIYddJXuLiFe2rxNYk=; h=From:To:Subject:Date:In-Reply-To:References:In-Reply-To: References:From; b=R4Vmyim224h5/XMz45qfXznrj1ZyFf2pM4ItdetN/LiHRZMGit4XTYX75PQCG4jHj 8ddXuoCdBWpBIwzfB6gXwaw2Y9P/wSFle2OJ+Ur6Ed1MZjwloSQiWmyi24v8059+Nq WWvNia9ifPVvxeFpdYxviBGpZKUeXeRF+mpawjxfBd9OaSNYgRe0D0U2tQpvZb9827 irqjd5HzrDJRq7MMk5x8p8QwW0K1Rt62r14fjwOxRSgIafVpruMEdz7IobcTIOPuN1 vPDGnjJMPJLGn6A7oXF40mjIz5hQDn0orYAFMIfSjdtmE+UxQrbTmmbgsLyXAFt+Ko AO0bfYSOw+xZg== Received: from de02dwia024.internal.synopsys.com (de02dwia024.internal.synopsys.com [10.225.19.81]) by mailhost.synopsys.com (Postfix) with ESMTP id 40830A0063; Thu, 18 Feb 2021 19:04:29 +0000 (UTC) X-SNPS-Relay: synopsys.com From: Gustavo Pimentel To: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Vinod Koul , Dan Williams , Bjorn Helgaas , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Lukas Wunner , Gustavo Pimentel Subject: [PATCH v7 15/15] dmaengine: dw-edma: Add pcim_iomap_table return check Date: Thu, 18 Feb 2021 20:04:09 +0100 Message-Id: X-Mailer: git-send-email 2.7.4 In-Reply-To: References: In-Reply-To: References: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently, is missing a null check on a pcim_iomap_table() return value and this can lead to a null pointer dereference if the desired BAR wasn't mapped previously. Fix this by adding a null check and returning -ENOMEM. Addresses-Coverity: ("Dereference null return") Signed-off-by: Gustavo Pimentel --- drivers/dma/dw-edma/dw-edma-pcie.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-pcie.c b/drivers/dma/dw-edma/dw-edma-pcie.c index fa66e03..44f6e09 100644 --- a/drivers/dma/dw-edma/dw-edma-pcie.c +++ b/drivers/dma/dw-edma/dw-edma-pcie.c @@ -240,6 +240,9 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, dw->rd_ch_cnt = vsec_data.rd_ch_cnt; dw->rg_region.vaddr = pcim_iomap_table(pdev)[vsec_data.rg.bar]; + if (!dw->rg_region.vaddr) + return -ENOMEM; + dw->rg_region.vaddr += vsec_data.rg.off; dw->rg_region.paddr = pdev->resource[vsec_data.rg.bar].start; dw->rg_region.paddr += vsec_data.rg.off; @@ -252,12 +255,18 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, struct dw_edma_block *dt_block = &vsec_data.dt_wr[i]; ll_region->vaddr = pcim_iomap_table(pdev)[ll_block->bar]; + if (!ll_region->vaddr) + return -ENOMEM; + ll_region->vaddr += ll_block->off; ll_region->paddr = pdev->resource[ll_block->bar].start; ll_region->paddr += ll_block->off; ll_region->sz = ll_block->sz; dt_region->vaddr = pcim_iomap_table(pdev)[dt_block->bar]; + if (!dt_region->vaddr) + return -ENOMEM; + dt_region->vaddr += dt_block->off; dt_region->paddr = pdev->resource[dt_block->bar].start; dt_region->paddr += dt_block->off; @@ -271,12 +280,18 @@ static int dw_edma_pcie_probe(struct pci_dev *pdev, struct dw_edma_block *dt_block = &vsec_data.dt_rd[i]; ll_region->vaddr = pcim_iomap_table(pdev)[ll_block->bar]; + if (!ll_region->vaddr) + return -ENOMEM; + ll_region->vaddr += ll_block->off; ll_region->paddr = pdev->resource[ll_block->bar].start; ll_region->paddr += ll_block->off; ll_region->sz = ll_block->sz; dt_region->vaddr = pcim_iomap_table(pdev)[dt_block->bar]; + if (!dt_region->vaddr) + return -ENOMEM; + dt_region->vaddr += dt_block->off; dt_region->paddr = pdev->resource[dt_block->bar].start; dt_region->paddr += dt_block->off; -- 2.7.4