From: Danylo Vodopianov <dvo-...@napatech.com>

CI founc couple coverity problems which were fixed in this commit.

CID 440550, 440551, 440545, 440553, 440552, 440547:
Null pointer dereferences  (REVERSE_INULL)
These issues were fixed by reworking variable NULL checking and adding
NULL checking before var using.

CID 440543:  Incorrect expression  (IDENTICAL_BRANCHES)
This issue was fixed by removing useless if statements from the code.

CID 440548:  Null pointer dereferences  (FORWARD_NULL)
This issue was fixed by adding NULL checking before
mp_fld_rst_serdes_rx var using.

CID 440546:  Resource leaks  (RESOURCE_LEAK)
This issue was fixed by moving NULL checking before var using.

CID 440540:  Error handling issues  (CHECKED_RETURN)
This issue was fixed with return value checking adding.

CID 440549:  (OVERRUN)
This issue was fixed with array edge values fixing.

Coverity issue: 440550
Fixes: 51052594f795 ("net/ntnic: add physical layer control module")

Signed-off-by: Danylo Vodopianov <dvo-...@napatech.com>
---
v2
* Update release notes
---
 .mailmap                                      |  1 +
 doc/guides/rel_notes/release_24_11.rst        |  1 +
 .../nt200a0x/reset/nthw_fpga_rst_nt200a0x.c   |  2 +-
 drivers/net/ntnic/nthw/core/nthw_fpga.c       | 24 ++++----
 drivers/net/ntnic/nthw/core/nthw_hif.c        | 18 +-----
 .../net/ntnic/nthw/model/nthw_fpga_model.c    | 58 ++++++++++---------
 drivers/net/ntnic/ntnic_ethdev.c              | 21 +++----
 drivers/net/ntnic/ntnic_vfio.c                |  5 +-
 drivers/net/ntnic/ntutil/nt_util.c            |  3 +-
 9 files changed, 67 insertions(+), 66 deletions(-)

diff --git a/.mailmap b/.mailmap
index 959c45a2d3..6b095a7449 100644
--- a/.mailmap
+++ b/.mailmap
@@ -295,6 +295,7 @@ Dan Nowlin <dan.now...@intel.com>
 Danny Patel <dan...@marvell.com>
 Danny Zhou <danny.z...@intel.com>
 Dan Wei <dan....@intel.com>
+Danylo Vodopianov <dvo-...@napatech.com>
 Dapeng Yu <dapengx...@intel.com>
 Darek Stojaczyk <dariusz.stojac...@intel.com>
 Daria Kolistratova <daria.kolistrat...@intel.com>
diff --git a/doc/guides/rel_notes/release_24_11.rst 
b/doc/guides/rel_notes/release_24_11.rst
index 4131b7dc57..e85549c1e1 100644
--- a/doc/guides/rel_notes/release_24_11.rst
+++ b/doc/guides/rel_notes/release_24_11.rst
@@ -101,6 +101,7 @@ New Features
 * **Update Napatech ntnic net driver [EXPERIMENTAL].**
 
   * Update supported version of the FPGA to 9563.55.49
+  * Fix Coverity issues
 
 Removed Items
 -------------
diff --git 
a/drivers/net/ntnic/nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c 
b/drivers/net/ntnic/nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c
index ea0276a90c..aa0d97dafd 100644
--- a/drivers/net/ntnic/nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c
+++ b/drivers/net/ntnic/nthw/core/nt200a0x/reset/nthw_fpga_rst_nt200a0x.c
@@ -263,7 +263,7 @@ static int nthw_fpga_rst_nt200a0x_reset(nthw_fpga_t *p_fpga,
        if (p->mp_fld_rst_serdes_rx)
                nthw_field_set_flush(p->mp_fld_rst_serdes_rx);  /* 0x03 2 ports 
*/
 
-       if (p->mp_fld_rst_serdes_rx_datapath) {
+       if (p->mp_fld_rst_serdes_rx_datapath && p->mp_fld_rst_serdes_rx) {
                nthw_field_set_flush(p->mp_fld_rst_serdes_rx_datapath);
                nthw_field_clr_flush(p->mp_fld_rst_serdes_rx);
        }
diff --git a/drivers/net/ntnic/nthw/core/nthw_fpga.c 
b/drivers/net/ntnic/nthw/core/nthw_fpga.c
index d70205e5e3..082d3950bb 100644
--- a/drivers/net/ntnic/nthw/core/nthw_fpga.c
+++ b/drivers/net/ntnic/nthw/core/nthw_fpga.c
@@ -217,19 +217,19 @@ int nthw_fpga_init(struct fpga_info_s *p_fpga_info)
        n_fpga_ident = p_fpga_info->n_fpga_ident;
 
        p_fpga_mgr = nthw_fpga_mgr_new();
-       nthw_fpga_mgr_init(p_fpga_mgr, nthw_fpga_instances,
-               (const void *)sa_nthw_fpga_mod_str_map);
-       nthw_fpga_mgr_log_dump(p_fpga_mgr);
-       p_fpga = nthw_fpga_mgr_query_fpga(p_fpga_mgr, n_fpga_ident, 
p_fpga_info);
-       p_fpga_info->mp_fpga = p_fpga;
-
-       if (p_fpga == NULL) {
-               NT_LOG(ERR, NTHW, "%s: Unsupported FPGA: %s (%08X)\n", 
p_adapter_id_str,
-                       s_fpga_prod_ver_rev_str, 
p_fpga_info->n_fpga_build_time);
-               return -1;
-       }
-
        if (p_fpga_mgr) {
+               nthw_fpga_mgr_init(p_fpga_mgr, nthw_fpga_instances,
+                       (const void *)sa_nthw_fpga_mod_str_map);
+               nthw_fpga_mgr_log_dump(p_fpga_mgr);
+               p_fpga = nthw_fpga_mgr_query_fpga(p_fpga_mgr, n_fpga_ident, 
p_fpga_info);
+               p_fpga_info->mp_fpga = p_fpga;
+
+               if (p_fpga == NULL) {
+                       NT_LOG(ERR, NTHW, "%s: Unsupported FPGA: %s (%08X)\n", 
p_adapter_id_str,
+                               s_fpga_prod_ver_rev_str, 
p_fpga_info->n_fpga_build_time);
+                       return -1;
+               }
+
                nthw_fpga_mgr_delete(p_fpga_mgr);
                p_fpga_mgr = NULL;
        }
diff --git a/drivers/net/ntnic/nthw/core/nthw_hif.c 
b/drivers/net/ntnic/nthw/core/nthw_hif.c
index f05e1a0c51..cc2aaf83e4 100644
--- a/drivers/net/ntnic/nthw/core/nthw_hif.c
+++ b/drivers/net/ntnic/nthw/core/nthw_hif.c
@@ -83,23 +83,11 @@ int nthw_hif_init(nthw_hif_t *p, nthw_fpga_t *p_fpga, int 
n_instance)
                p->mn_instance, p->mn_fpga_hif_ref_clk_freq, 
p->mn_fpga_param_hif_per_ps);
 
        p->mp_reg_build_seed = NULL;    /* Reg/Fld not present on HIF */
-
-       if (p->mp_reg_build_seed)
-               p->mp_fld_build_seed = NULL;    /* Reg/Fld not present on HIF */
-       else
-               p->mp_fld_build_seed = NULL;
+       p->mp_fld_build_seed = NULL;    /* Reg/Fld not present on HIF */
 
        p->mp_reg_core_speed = NULL;    /* Reg/Fld not present on HIF */
-
-       if (p->mp_reg_core_speed) {
-               p->mp_fld_core_speed = NULL;    /* Reg/Fld not present on HIF */
-               p->mp_fld_ddr3_speed = NULL;    /* Reg/Fld not present on HIF */
-
-       } else {
-               p->mp_reg_core_speed = NULL;
-               p->mp_fld_core_speed = NULL;
-               p->mp_fld_ddr3_speed = NULL;
-       }
+       p->mp_fld_core_speed = NULL;    /* Reg/Fld not present on HIF */
+       p->mp_fld_ddr3_speed = NULL;    /* Reg/Fld not present on HIF */
 
        /* Optional registers since: 2018-04-25 */
        p->mp_reg_int_mask = NULL;      /* Reg/Fld not present on HIF */
diff --git a/drivers/net/ntnic/nthw/model/nthw_fpga_model.c 
b/drivers/net/ntnic/nthw/model/nthw_fpga_model.c
index f8e6da2d7f..14d1ebf5fa 100644
--- a/drivers/net/ntnic/nthw/model/nthw_fpga_model.c
+++ b/drivers/net/ntnic/nthw/model/nthw_fpga_model.c
@@ -28,7 +28,7 @@ static const char *const sa_nthw_fpga_bus_type_str[] = {
 
 static const char *get_bus_name(int n_bus_type_id)
 {
-       if (n_bus_type_id >= 1 && n_bus_type_id <= 
(int)ARRAY_SIZE(sa_nthw_fpga_bus_type_str))
+       if (n_bus_type_id >= 0 && n_bus_type_id < 
(int)ARRAY_SIZE(sa_nthw_fpga_bus_type_str))
                return sa_nthw_fpga_bus_type_str[n_bus_type_id];
 
        return "ERR";
@@ -678,45 +678,51 @@ void nthw_register_set_debug_mode(nthw_register_t *p, 
unsigned int debug_mode)
 static int nthw_register_read_data(const nthw_register_t *p)
 {
        int rc = -1;
+       if (p) {
+               if (p->mp_owner) {
+                       const int n_bus_type_id = 
nthw_module_get_bus(p->mp_owner);
+                       const uint32_t addr = p->mn_addr;
+                       const uint32_t len = p->mn_len;
+                       uint32_t *const p_data = p->mp_shadow;
+                       const bool trc = (p->mn_debug_mode & 
NTHW_REG_TRACE_ON_READ);
 
-       const int n_bus_type_id = nthw_module_get_bus(p->mp_owner);
-       const uint32_t addr = p->mn_addr;
-       const uint32_t len = p->mn_len;
-       uint32_t *const p_data = p->mp_shadow;
-       const bool trc = (p->mn_debug_mode & NTHW_REG_TRACE_ON_READ);
+                       struct fpga_info_s *p_fpga_info = NULL;
 
-       struct fpga_info_s *p_fpga_info = NULL;
+                       if (p->mp_owner->mp_owner)
+                               p_fpga_info = 
p->mp_owner->mp_owner->p_fpga_info;
 
-       if (p && p->mp_owner && p->mp_owner->mp_owner)
-               p_fpga_info = p->mp_owner->mp_owner->p_fpga_info;
+                       assert(p_fpga_info);
+                       assert(p_data);
 
-       assert(p_fpga_info);
-       assert(p_data);
-
-       rc = nthw_read_data(p_fpga_info, trc, n_bus_type_id, addr, len, p_data);
+                       rc = nthw_read_data(p_fpga_info, trc, n_bus_type_id, 
addr, len, p_data);
+               }
+       }
        return rc;
 }
 
 static int nthw_register_write_data(const nthw_register_t *p, uint32_t cnt)
 {
        int rc = -1;
+       if (p) {
+               if (p->mp_owner) {
+                       const int n_bus_type_id = 
nthw_module_get_bus(p->mp_owner);
+                       const uint32_t addr = p->mn_addr;
+                       const uint32_t len = p->mn_len;
+                       uint32_t *const p_data = p->mp_shadow;
+                       const bool trc = (p->mn_debug_mode & 
NTHW_REG_TRACE_ON_WRITE);
 
-       const int n_bus_type_id = nthw_module_get_bus(p->mp_owner);
-       const uint32_t addr = p->mn_addr;
-       const uint32_t len = p->mn_len;
-       uint32_t *const p_data = p->mp_shadow;
-       const bool trc = (p->mn_debug_mode & NTHW_REG_TRACE_ON_WRITE);
+                       struct fpga_info_s *p_fpga_info = NULL;
 
-       struct fpga_info_s *p_fpga_info = NULL;
+                       if (p->mp_owner->mp_owner)
+                               p_fpga_info = 
p->mp_owner->mp_owner->p_fpga_info;
 
-       if (p && p->mp_owner && p->mp_owner->mp_owner)
-               p_fpga_info = p->mp_owner->mp_owner->p_fpga_info;
-
-       assert(p_fpga_info);
-       assert(p_data);
-
-       rc = nthw_write_data(p_fpga_info, trc, n_bus_type_id, addr, (len * 
cnt), p_data);
+                       assert(p_fpga_info);
+                       assert(p_data);
 
+                       rc = nthw_write_data(p_fpga_info, trc, n_bus_type_id, 
addr, (len * cnt),
+                               p_data);
+               }
+       }
        return rc;
 }
 
diff --git a/drivers/net/ntnic/ntnic_ethdev.c b/drivers/net/ntnic/ntnic_ethdev.c
index 8568798ec8..f351469d0a 100644
--- a/drivers/net/ntnic/ntnic_ethdev.c
+++ b/drivers/net/ntnic/ntnic_ethdev.c
@@ -42,7 +42,7 @@ static struct drv_s *_g_p_drv[NUM_ADAPTER_MAX] = { NULL };
 static void
 store_pdrv(struct drv_s *p_drv)
 {
-       if (p_drv->adapter_no > NUM_ADAPTER_MAX) {
+       if (p_drv->adapter_no >= NUM_ADAPTER_MAX) {
                NT_LOG(ERR, NTNIC,
                        "Internal error adapter number %u out of range. Max 
number of adapters: %u\n",
                        p_drv->adapter_no, NUM_ADAPTER_MAX);
@@ -384,16 +384,17 @@ eth_dev_close(struct rte_eth_dev *eth_dev)
        internals->p_drv = NULL;
 
        rte_eth_dev_release_port(eth_dev);
+       if (p_drv) {
+               /* decrease initialized ethernet devices */
+               p_drv->n_eth_dev_init_count--;
 
-       /* decrease initialized ethernet devices */
-       p_drv->n_eth_dev_init_count--;
-
-       /*
-        * rte_pci_dev has no private member for p_drv
-        * wait until all rte_eth_dev's are closed - then close adapters via 
p_drv
-        */
-       if (!p_drv->n_eth_dev_init_count && p_drv)
-               drv_deinit(p_drv);
+               /*
+                * rte_pci_dev has no private member for p_drv
+                * wait until all rte_eth_dev's are closed - then close 
adapters via p_drv
+                */
+               if (!p_drv->n_eth_dev_init_count)
+                       drv_deinit(p_drv);
+       }
 
        return 0;
 }
diff --git a/drivers/net/ntnic/ntnic_vfio.c b/drivers/net/ntnic/ntnic_vfio.c
index f4433152b7..0542b1ce62 100644
--- a/drivers/net/ntnic/ntnic_vfio.c
+++ b/drivers/net/ntnic/ntnic_vfio.c
@@ -49,6 +49,7 @@ vfio_get(int vf_num)
 int
 nt_vfio_setup(struct rte_pci_device *dev)
 {
+       int ret;
        char devname[RTE_DEV_NAME_MAX_LEN] = { 0 };
        int iommu_group_num;
        int vf_num;
@@ -71,7 +72,9 @@ nt_vfio_setup(struct rte_pci_device *dev)
        vfio->iova_addr = START_VF_IOVA;
 
        rte_pci_device_name(&dev->addr, devname, RTE_DEV_NAME_MAX_LEN);
-       rte_vfio_get_group_num(rte_pci_get_sysfs_path(), devname, 
&iommu_group_num);
+       ret = rte_vfio_get_group_num(rte_pci_get_sysfs_path(), devname, 
&iommu_group_num);
+       if (ret <= 0)
+               return -1;
 
        if (vf_num == 0) {
                /* use default container for pf0 */
diff --git a/drivers/net/ntnic/ntutil/nt_util.c 
b/drivers/net/ntnic/ntutil/nt_util.c
index 9904e3df3b..a69a8e10c1 100644
--- a/drivers/net/ntnic/ntutil/nt_util.c
+++ b/drivers/net/ntnic/ntutil/nt_util.c
@@ -31,7 +31,8 @@ uint64_t nt_os_get_time_monotonic_counter(void)
 /* Allocation size matching minimum alignment of specified size */
 uint64_t nt_util_align_size(uint64_t size)
 {
-       return 1 << rte_log2_u64(size);
+       uint64_t alignment_size = 1ULL << rte_log2_u64(size);
+       return alignment_size;
 }
 
 void nt_util_vfio_init(struct nt_util_vfio_impl *impl)
-- 
2.45.0

Reply via email to