[bug report] mtd: nand: omap2: fix return value check in omap_nand_probe()

Roger Quadros rogerq at ti.com
Thu Aug 4 00:05:09 PDT 2016


+Franklin

On 03/08/16 15:32, Dan Carpenter wrote:
> Hello Wei Yongjun,
> 
> The patch de3bfc4a1616: "mtd: nand: omap2: fix return value check in
> omap_nand_probe()" from Jul 14, 2016, leads to the following static
> checker warning:
> 
> 	drivers/mtd/nand/omap2.c:2173 omap_nand_probe()
> 	error: 'info->dma' dereferencing possible ERR_PTR()
> 
> drivers/mtd/nand/omap2.c
>   1921          case NAND_OMAP_PREFETCH_DMA:
>   1922                  dma_cap_zero(mask);
>   1923                  dma_cap_set(DMA_SLAVE, mask);
>   1924                  info->dma = dma_request_chan(pdev->dev.parent, "rxtx");
>   1925  
>   1926                  if (IS_ERR(info->dma)) {
>                                    ^^^^^^^^^
>   1927                          dev_err(&pdev->dev, "DMA engine request failed\n");
>   1928                          err = PTR_ERR(info->dma);
>   1929                          goto return_error;
>   1930                  } else {
>   1931                          struct dma_slave_config cfg;
>   1932  
>   1933                          memset(&cfg, 0, sizeof(cfg));
>   1934                          cfg.src_addr = info->phys_base;
>   1935                          cfg.dst_addr = info->phys_base;
>   1936                          cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>   1937                          cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>   1938                          cfg.src_maxburst = 16;
>   1939                          cfg.dst_maxburst = 16;
>   1940                          err = dmaengine_slave_config(info->dma, &cfg);
>   1941                          if (err) {
>   1942                                  dev_err(&pdev->dev, "DMA engine slave config failed: %d\n",
>   1943                                          err);
>   1944                                  goto return_error;
>   1945                          }
>   1946                          nand_chip->read_buf   = omap_read_buf_dma_pref;
>   1947                          nand_chip->write_buf  = omap_write_buf_dma_pref;
>   1948                  }
>   1949                  break;
>   1950  
> 
> [ snip ]
> 
>   2170  
>   2171  return_error:
>   2172          if (info->dma)
>   2173                  dma_release_channel(info->dma);
>                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> We can't pass error pointers to dma_release_channel().  I can't compile
> this code though, so I'm not going to patch it.
> 
>   2174          if (nand_chip->ecc.priv) {
>   2175                  nand_bch_free(nand_chip->ecc.priv);
>   2176                  nand_chip->ecc.priv = NULL;
>   2177          }
>   2178          return err;
>   2179  }
> 
> regards,
> dan carpenter
> 

--
cheers,
-roger



More information about the linux-mtd mailing list