* Dan Carpenter dan.carpen...@oracle.com [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
1409res = platform_get_resource_byname(pdev,
IORESOURCE_DMA, rx);
1410if (res)
^^^
Patch introduces a check.
1411sig = res-start;
1412host-dma_rx = dma_request_slave_channel_compat(mask,
1413omap_dma_filter_fn, sig,
pdev-dev, rx);
1414if (!host-dma_rx)
1415dev_warn(host-dev, unable to obtain RX DMA
engine channel %u\n,
1416sig);
1417
1418ret = request_irq(host-irq, mmc_omap_irq, 0,
DRIVER_NAME, host);
1419if (ret)
1420goto err_free_dma;
1421
1422if (pdata-init != NULL) {
1423ret = pdata-init(pdev-dev);
1424if (ret 0)
1425goto err_free_irq;
1426}
1427
1428host-nr_slots = pdata-nr_slots;
1429host-reg_shift = (mmc_omap7xx() ? 1 : 2);
1430
1431host-mmc_omap_wq = alloc_workqueue(mmc_omap, 0, 0);
1432if (!host-mmc_omap_wq)
1433goto err_plat_cleanup;
1434
1435for (i = 0; i pdata-nr_slots; i++) {
1436ret = mmc_omap_new_slot(host, i);
1437if (ret 0) {
1438while (--i = 0)
1439
mmc_omap_remove_slot(host-slots[i]);
1440
1441goto err_destroy_wq;
1442}
1443}
1444
1445return 0;
1446
1447err_destroy_wq:
1448destroy_workqueue(host-mmc_omap_wq);
1449err_plat_cleanup:
1450if (pdata-cleanup)
1451pdata-cleanup(pdev-dev);
1452err_free_irq:
1453free_irq(host-irq, host);
1454err_free_dma:
1455if (host-dma_tx)
1456dma_release_channel(host-dma_tx);
1457if (host-dma_rx)
1458dma_release_channel(host-dma_rx);
1459clk_put(host-fclk);
1460err_free_iclk:
1461clk_disable(host-iclk);
1462clk_put(host-iclk);
1463err_free_mmc_host:
1464iounmap(host-virt_base);
1465err_ioremap:
1466kfree(host);
1467err_free_mem_region:
1468release_mem_region(res-start, resource_size(res));
^^
Existing unchecked dereferences.
1469return 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 majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html