dmaengine.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).