Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751641AbdFJTl2 (ORCPT ); Sat, 10 Jun 2017 15:41:28 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:44382 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751137AbdFJTl1 (ORCPT ); Sat, 10 Jun 2017 15:41:27 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 7A4DE60EB7 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=ohaugan@codeaurora.org From: Olav Haugan To: ohaugan@codeaurora.org, catalin.marinas@arm.com, will.deacon@arm.com, robin.murphy@arm.com Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] arm64/dma-mapping: Fix null-pointer check Date: Sat, 10 Jun 2017 12:41:10 -0700 Message-Id: <20170610194110.27712-1-ohaugan@codeaurora.org> X-Mailer: git-send-email 2.13.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2164 Lines: 66 The current null-pointer check in __dma_alloc_coherent and __dma_free_coherent is pretty much useless since we are dereferencing the pointer before checking for null. Check for null-pointer before the actual dereferencing of the pointer. Signed-off-by: Olav Haugan --- arch/arm64/mm/dma-mapping.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 3216e098c058..a4b65773711d 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -95,11 +95,6 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, unsigned long attrs) { - if (dev == NULL) { - WARN_ONCE(1, "Use an actual device structure for DMA allocation\n"); - return NULL; - } - if (IS_ENABLED(CONFIG_ZONE_DMA) && dev->coherent_dma_mask <= DMA_BIT_MASK(32)) flags |= GFP_DMA; @@ -128,10 +123,6 @@ static void __dma_free_coherent(struct device *dev, size_t size, bool freed; phys_addr_t paddr = dma_to_phys(dev, dma_handle); - if (dev == NULL) { - WARN_ONCE(1, "Use an actual device structure for DMA allocation\n"); - return; - } freed = dma_release_from_contiguous(dev, phys_to_page(paddr), @@ -149,6 +140,11 @@ static void *__dma_alloc(struct device *dev, size_t size, bool coherent = is_device_dma_coherent(dev); pgprot_t prot = __get_dma_pgprot(attrs, PAGE_KERNEL, false); + if (!dev) { + WARN_ONCE(1, "Use an actual device structure for DMA allocation\n"); + return NULL; + } + size = PAGE_ALIGN(size); if (!coherent && !gfpflags_allow_blocking(flags)) { @@ -192,8 +188,13 @@ static void __dma_free(struct device *dev, size_t size, void *vaddr, dma_addr_t dma_handle, unsigned long attrs) { - void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle)); + void *swiotlb_addr; + if (!dev) { + WARN_ONCE(1, "Use an actual device structure for DMA free\n"); + return; + } + swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle)); size = PAGE_ALIGN(size); if (!is_device_dma_coherent(dev)) { -- 2.13.0