[bug report] qed: sanitize PBL chains allocation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Alexander Lobakin,

The patch 9b6ee3cf95d3: "qed: sanitize PBL chains allocation" from
Jul 23, 2020, leads to the following static checker warning:

	drivers/net/ethernet/qlogic/qed/qed_chain.c:299 qed_chain_alloc_pbl()
	error: uninitialized symbol 'pbl_virt'.

drivers/net/ethernet/qlogic/qed/qed_chain.c
   249  static int qed_chain_alloc_pbl(struct qed_dev *cdev, struct qed_chain *chain)
   250  {
   251          struct device *dev = &cdev->pdev->dev;
   252          struct addr_tbl_entry *addr_tbl;
   253          dma_addr_t phys, pbl_phys;
   254          __le64 *pbl_virt;
                ^^^^^^^^^^^^^^^^

   255          u32 page_cnt, i;
   256          size_t size;
   257          void *virt;
   258  
   259          page_cnt = chain->page_cnt;
   260  
   261          size = array_size(page_cnt, sizeof(*addr_tbl));
   262          if (unlikely(size == SIZE_MAX))
   263                  return -EOVERFLOW;
   264  
   265          addr_tbl = vzalloc(size);
   266          if (!addr_tbl)
   267                  return -ENOMEM;
   268  
   269          chain->pbl.pp_addr_tbl = addr_tbl;
   270  
   271          if (chain->b_external_pbl)
   272                  goto alloc_pages;
                        ^^^^^^^^^^^^^^^^
uninitialized

   273  
   274          size = array_size(page_cnt, sizeof(*pbl_virt));
   275          if (unlikely(size == SIZE_MAX))
   276                  return -EOVERFLOW;
   277  
   278          pbl_virt = dma_alloc_coherent(dev, size, &pbl_phys, GFP_KERNEL);
   279          if (!pbl_virt)
   280                  return -ENOMEM;
   281  
   282          chain->pbl_sp.table_virt = pbl_virt;
   283          chain->pbl_sp.table_phys = pbl_phys;
   284          chain->pbl_sp.table_size = size;
   285  
   286  alloc_pages:
   287          for (i = 0; i < page_cnt; i++) {
   288                  virt = dma_alloc_coherent(dev, chain->page_size, &phys,
   289                                            GFP_KERNEL);
   290                  if (!virt)
   291                          return -ENOMEM;
   292  
   293                  if (i == 0) {
   294                          qed_chain_init_mem(chain, virt, phys);
   295                          qed_chain_reset(chain);
   296                  }
   297  
   298                  /* Fill the PBL table with the physical address of the page */
   299                  pbl_virt[i] = cpu_to_le64(phys);
                        ^^^^^^^^^^^
   300  
   301                  /* Keep the virtual address of the page */
   302                  addr_tbl[i].virt_addr = virt;
   303                  addr_tbl[i].dma_map = phys;
   304          }
   305  
   306          return 0;
   307  }

regards,
dan carpenter



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux