* [bug report] dmaengine: driver for the iop32x, iop33x, and iop13xx raid engines
@ 2021-04-13 10:56 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2021-04-13 10:56 UTC (permalink / raw)
To: dan.j.williams; +Cc: dmaengine
Hello Dan Williams,
The patch c211092313b9: "dmaengine: driver for the iop32x, iop33x,
and iop13xx raid engines" from Jan 2, 2007, leads to the following
static checker warning:
drivers/dma/iop-adma.c:1425 iop_adma_probe()
warn: '&iop_chan->common.device_node' not removed from list
drivers/dma/iop-adma.c
1377 spin_lock_init(&iop_chan->lock);
1378 INIT_LIST_HEAD(&iop_chan->chain);
1379 INIT_LIST_HEAD(&iop_chan->all_slots);
1380 iop_chan->common.device = dma_dev;
1381 dma_cookie_init(&iop_chan->common);
1382 list_add_tail(&iop_chan->common.device_node, &dma_dev->channels);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
We add this to the dma_dev channels list but
1383
1384 if (dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask)) {
1385 ret = iop_adma_memcpy_self_test(adev);
1386 dev_dbg(&pdev->dev, "memcpy self test returned %d\n", ret);
1387 if (ret)
1388 goto err_free_iop_chan;
if there is an error
1389 }
1390
1391 if (dma_has_cap(DMA_XOR, dma_dev->cap_mask)) {
1392 ret = iop_adma_xor_val_self_test(adev);
1393 dev_dbg(&pdev->dev, "xor self test returned %d\n", ret);
1394 if (ret)
1395 goto err_free_iop_chan;
1396 }
1397
1398 if (dma_has_cap(DMA_PQ, dma_dev->cap_mask) &&
1399 dma_has_cap(DMA_PQ_VAL, dma_dev->cap_mask)) {
1400 #ifdef CONFIG_RAID6_PQ
1401 ret = iop_adma_pq_zero_sum_self_test(adev);
1402 dev_dbg(&pdev->dev, "pq self test returned %d\n", ret);
1403 #else
1404 /* can not test raid6, so do not publish capability */
1405 dma_cap_clear(DMA_PQ, dma_dev->cap_mask);
1406 dma_cap_clear(DMA_PQ_VAL, dma_dev->cap_mask);
1407 ret = 0;
1408 #endif
1409 if (ret)
1410 goto err_free_iop_chan;
1411 }
1412
1413 dev_info(&pdev->dev, "Intel(R) IOP: ( %s%s%s%s%s%s)\n",
1414 dma_has_cap(DMA_PQ, dma_dev->cap_mask) ? "pq " : "",
1415 dma_has_cap(DMA_PQ_VAL, dma_dev->cap_mask) ? "pq_val " : "",
1416 dma_has_cap(DMA_XOR, dma_dev->cap_mask) ? "xor " : "",
1417 dma_has_cap(DMA_XOR_VAL, dma_dev->cap_mask) ? "xor_val " : "",
1418 dma_has_cap(DMA_MEMCPY, dma_dev->cap_mask) ? "cpy " : "",
1419 dma_has_cap(DMA_INTERRUPT, dma_dev->cap_mask) ? "intr " : "");
1420
1421 dma_async_device_register(dma_dev);
1422 goto out;
1423
1424 err_free_iop_chan:
1425 kfree(iop_chan);
Then there is a freed pointer still on the list leading to a use after
free.
1426 err_free_dma:
1427 dma_free_coherent(&adev->pdev->dev, plat_data->pool_size,
1428 adev->dma_desc_pool_virt, adev->dma_desc_pool);
1429 err_free_adev:
1430 kfree(adev);
1431 out:
1432 return ret;
1433 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-04-13 10:56 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-13 10:56 [bug report] dmaengine: driver for the iop32x, iop33x, and iop13xx raid engines Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).