Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932279AbcKRO3g (ORCPT ); Fri, 18 Nov 2016 09:29:36 -0500 Received: from mail-wm0-f53.google.com ([74.125.82.53]:37729 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932127AbcKRO33 (ORCPT ); Fri, 18 Nov 2016 09:29:29 -0500 MIME-Version: 1.0 In-Reply-To: <1478900564-5086-1-git-send-email-khoroshilov@ispras.ru> References: <1478900564-5086-1-git-send-email-khoroshilov@ispras.ru> From: Ulf Hansson Date: Fri, 18 Nov 2016 15:29:27 +0100 Message-ID: Subject: Re: [PATCH] mmc: wbsd: implement check for dma mapping error To: Alexey Khoroshilov Cc: Pierre Ossman , linux-mmc , "linux-kernel@vger.kernel.org" , ldv-project@linuxtesting.org Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2136 Lines: 69 On 11 November 2016 at 22:42, Alexey Khoroshilov wrote: > wbsd_request_dma() does not check for dma mapping errors. > > Found by Linux Driver Verification project (linuxtesting.org). > > Signed-off-by: Alexey Khoroshilov Thanks, applied for next! Kind regards Uffe > --- > drivers/mmc/host/wbsd.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/mmc/host/wbsd.c b/drivers/mmc/host/wbsd.c > index c3fd16d997ca..80a3b11f3217 100644 > --- a/drivers/mmc/host/wbsd.c > +++ b/drivers/mmc/host/wbsd.c > @@ -1395,23 +1395,25 @@ static void wbsd_request_dma(struct wbsd_host *host, int dma) > */ > host->dma_addr = dma_map_single(mmc_dev(host->mmc), host->dma_buffer, > WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); > + if (dma_mapping_error(mmc_dev(host->mmc), host->dma_addr)) > + goto kfree; > > /* > * ISA DMA must be aligned on a 64k basis. > */ > if ((host->dma_addr & 0xffff) != 0) > - goto kfree; > + goto unmap; > /* > * ISA cannot access memory above 16 MB. > */ > else if (host->dma_addr >= 0x1000000) > - goto kfree; > + goto unmap; > > host->dma = dma; > > return; > > -kfree: > +unmap: > /* > * If we've gotten here then there is some kind of alignment bug > */ > @@ -1421,6 +1423,7 @@ static void wbsd_request_dma(struct wbsd_host *host, int dma) > WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); > host->dma_addr = 0; > > +kfree: > kfree(host->dma_buffer); > host->dma_buffer = NULL; > > @@ -1434,7 +1437,7 @@ static void wbsd_request_dma(struct wbsd_host *host, int dma) > > static void wbsd_release_dma(struct wbsd_host *host) > { > - if (host->dma_addr) { > + if (!dma_mapping_error(mmc_dev(host->mmc), host->dma_addr)) { > dma_unmap_single(mmc_dev(host->mmc), host->dma_addr, > WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); > } > -- > 2.7.4 >