spi: rockchip: potential NULL dereference on error
authorDan Carpenter <dan.carpenter@oracle.com>
Wed, 4 May 2016 06:25:46 +0000 (09:25 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 4 May 2016 13:41:56 +0000 (14:41 +0100)
We were calling dma_release_channel(rs->dma_tx.ch) when "rs->dma_tx.ch"
is potentially NULL.  There is actually a call to that in the unwind
code at the bottom of the function so we can just re-arrange this a bit
and remove the call.  Also there is no need to set rs->dma_tx.ch to
NULL on this error path.

Fixes: e4c0e06f949b ('spi: rockchip: fix probe deferral handling')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-rockchip.c

index 6c6c001..cd89682 100644 (file)
@@ -744,10 +744,8 @@ static int rockchip_spi_probe(struct platform_device *pdev)
        rs->dma_rx.ch = dma_request_chan(rs->dev, "rx");
        if (IS_ERR(rs->dma_rx.ch)) {
                if (PTR_ERR(rs->dma_rx.ch) == -EPROBE_DEFER) {
-                       dma_release_channel(rs->dma_tx.ch);
-                       rs->dma_tx.ch = NULL;
                        ret = -EPROBE_DEFER;
-                       goto err_get_fifo_len;
+                       goto err_free_dma_tx;
                }
                dev_warn(rs->dev, "Failed to request RX DMA channel\n");
                rs->dma_rx.ch = NULL;
@@ -775,10 +773,11 @@ static int rockchip_spi_probe(struct platform_device *pdev)
 
 err_register_master:
        pm_runtime_disable(&pdev->dev);
-       if (rs->dma_tx.ch)
-               dma_release_channel(rs->dma_tx.ch);
        if (rs->dma_rx.ch)
                dma_release_channel(rs->dma_rx.ch);
+err_free_dma_tx:
+       if (rs->dma_tx.ch)
+               dma_release_channel(rs->dma_tx.ch);
 err_get_fifo_len:
        clk_disable_unprepare(rs->spiclk);
 err_spiclk_enable: