* Dan Carpenter <[email protected]> [131202 00:07]:
> Hello Tony Lindgren,
> 
> This is a semi-automatic email about new static checker warnings.
> 
> The patch 31ee9181eb92: "mmc: omap: Fix DMA configuration to not rely 
> on device id" from Nov 26, 2013, leads to the following Smatch 
> complaint:
> 
> drivers/mmc/host/omap.c:1468 mmc_omap_probe()
>        error: we previously assumed 'res' could be null (see line 1410)
> 
> drivers/mmc/host/omap.c
>   1409                res = platform_get_resource_byname(pdev, 
> IORESOURCE_DMA, "rx");
>   1410                if (res)
>                     ^^^
> Patch introduces a check.
> 
>   1411                        sig = res->start;
>   1412                host->dma_rx = dma_request_slave_channel_compat(mask,
>   1413                                        omap_dma_filter_fn, &sig, 
> &pdev->dev, "rx");
>   1414                if (!host->dma_rx)
>   1415                        dev_warn(host->dev, "unable to obtain RX DMA 
> engine channel %u\n",
>   1416                                sig);
>   1417        
>   1418                ret = request_irq(host->irq, mmc_omap_irq, 0, 
> DRIVER_NAME, host);
>   1419                if (ret)
>   1420                        goto err_free_dma;
>   1421        
>   1422                if (pdata->init != NULL) {
>   1423                        ret = pdata->init(&pdev->dev);
>   1424                        if (ret < 0)
>   1425                                goto err_free_irq;
>   1426                }
>   1427        
>   1428                host->nr_slots = pdata->nr_slots;
>   1429                host->reg_shift = (mmc_omap7xx() ? 1 : 2);
>   1430        
>   1431                host->mmc_omap_wq = alloc_workqueue("mmc_omap", 0, 0);
>   1432                if (!host->mmc_omap_wq)
>   1433                        goto err_plat_cleanup;
>   1434        
>   1435                for (i = 0; i < pdata->nr_slots; i++) {
>   1436                        ret = mmc_omap_new_slot(host, i);
>   1437                        if (ret < 0) {
>   1438                                while (--i >= 0)
>   1439                                        
> mmc_omap_remove_slot(host->slots[i]);
>   1440        
>   1441                                goto err_destroy_wq;
>   1442                        }
>   1443                }
>   1444        
>   1445                return 0;
>   1446        
>   1447        err_destroy_wq:
>   1448                destroy_workqueue(host->mmc_omap_wq);
>   1449        err_plat_cleanup:
>   1450                if (pdata->cleanup)
>   1451                        pdata->cleanup(&pdev->dev);
>   1452        err_free_irq:
>   1453                free_irq(host->irq, host);
>   1454        err_free_dma:
>   1455                if (host->dma_tx)
>   1456                        dma_release_channel(host->dma_tx);
>   1457                if (host->dma_rx)
>   1458                        dma_release_channel(host->dma_rx);
>   1459                clk_put(host->fclk);
>   1460        err_free_iclk:
>   1461                clk_disable(host->iclk);
>   1462                clk_put(host->iclk);
>   1463        err_free_mmc_host:
>   1464                iounmap(host->virt_base);
>   1465        err_ioremap:
>   1466                kfree(host);
>   1467        err_free_mem_region:
>   1468                release_mem_region(res->start, resource_size(res));
>                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Existing unchecked dereferences.
> 
>   1469                return ret;
>   1470        }

Oops. Thanks a lot for reporting this, I'll post a fix for it separately.

Looks like the minimal fix is to add what at least omap_hsmmc.c is doing:

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res)
        release_mem_region(res->start, resource_size(res));

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to