[dpdk-dev] cppcheck on dpdk

Colin Ian King colin.king at canonical.com
Thu May 31 13:28:13 CEST 2018


On 16/05/18 13:41, Ferruh Yigit wrote:
> Today after listening Colin's Static Analysis talk, I run cppcheck on v18.05-rc4
> code and it revealed some issues, sharing here for anyone to interested in
> fixing them. At least I encourage to check maintainers to check their own pieces.
> 
> It is really easy to run cppcheck, in dpdk source folder:
> cppcheck --force .

FYI, it may be useful to run it with the following options:

cppecheck --enable=all --force

..this may lead to more false positives, but it can catch some deeper
issues.

Colin

> 
> With above command cppcheck verifies all #ifdef paths, some issues below seems
> related to this and that is why these issues not seen in build tests.
> 
> 
> [app/test-pmd/cmdline_mtr.c:115]: (error) Memory leak: dscp_table
> [app/test-pmd/flowgen.c:160]: (error) Uninitialized variable: ol_flags
> [app/test-pmd/tm.c:594]: (error) Memory leak: tnp.shared_shaper_id
> [drivers/bus/dpaa/base/fman/fman.c:557]: (error) Uninitialized variable: __if
> [drivers/bus/dpaa/base/qbman/qman.c:1220]: (error) Address of auto-variable
> 'p->shadow_dqrr[DQRR_PTR2IDX(dq)]' returned
> [drivers/bus/ifpga/ifpga_bus.c:433]: (warning) Possible null pointer dereference: c2
> [drivers/crypto/ccp/ccp_pci.c:41]: (error) Resource leak: fp
> [drivers/crypto/dpaa_sec/dpaa_sec.c:662]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:731]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:826]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:881]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:1020]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:1132]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:1258]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:1353]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/crypto/dpaa_sec/dpaa_sec.c:1392]: (error) Address of auto-variable
> 'ctx->job' returned
> [drivers/net/avf/base/avf_adminq.c:301]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/avf/base/avf_adminq.c:336]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/avf/base/avf_adminq.c:298]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/avf/base/avf_adminq.c:333]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/avf/base/avf_common.c:367]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/avf/base/avf_common.c:364]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/axgbe/axgbe_dev.c:808]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/axgbe/axgbe_dev.c] -> [drivers/net/axgbe/axgbe_dev.c]: (error)
> Invalid value: 0x0204_BUSY_WIDTH
> [drivers/net/axgbe/axgbe_ethdev.c] -> [drivers/net/axgbe/axgbe_ethdev.c]:
> (error) Invalid value: 0x0008_PR_WIDTH
> [drivers/net/axgbe/axgbe_i2c.c] -> [drivers/net/axgbe/axgbe_i2c.c]: (error)
> Invalid value: 0x006c_EN_WIDTH
> [drivers/net/axgbe/axgbe_phy_impl.c] -> [drivers/net/axgbe/axgbe_phy_impl.c]:
> (error) Invalid value: 0x0080_ID_WIDTH
> [drivers/net/axgbe/axgbe_rxtx.c:292]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/axgbe/axgbe_rxtx.c:592]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/axgbe/axgbe_rxtx.c] -> [drivers/net/axgbe/axgbe_rxtx.c]: (error)
> Invalid value: 0x48_PRXQ_WIDTH
> [drivers/net/bnx2x/bnx2x.c:3995]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/bnx2x.c:4000]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/bnx2x.c:8729]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/bnx2x.c:9765]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/elink.c:1042]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/elink.c:2711]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/elink.c:9662]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnx2x/elink.c:10295]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnxt/bnxt_ethdev.c:594]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnxt/bnxt_ethdev.c:634]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnxt/bnxt_rxr.c:482]: (error) Uninitialized variable: ag_cons
> [drivers/net/bnxt/bnxt_stats.c:211]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/bnxt/bnxt_stats.c:248]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/e1000/base/e1000_82575.c:2324]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [drivers/net/e1000/base/e1000_82575.c:2326]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [drivers/net/e1000/base/e1000_82575.c:2333]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [drivers/net/e1000/base/e1000_82575.c:2335]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [drivers/net/e1000/base/e1000_ich8lan.c:5169]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [drivers/net/e1000/igb_ethdev.c:4721]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/e1000/igb_pf.c:154]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/e1000/igb_pf.c:156]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/enic/base/vnic_dev.c:757]: (warning) Possible null pointer
> dereference: notify_addr
> [drivers/net/i40e/base/i40e_adminq.c:1094]: (error) Uninitialized variable: ntu
> [drivers/net/i40e/base/i40e_adminq.c:1149]: (error) Uninitialized variable: ntu
> [drivers/net/i40e/base/i40e_adminq.c:1157]: (error) Uninitialized variable: ntu
> [drivers/net/i40e/base/i40e_adminq.c:322]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:369]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:325]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:372]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:312]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:359]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:315]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_adminq.c:362]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:414]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:417]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:404]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:1179]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:1447]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:1457]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:6482]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:6505]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:6556]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:6581]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_common.c:407]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/i40e/base/i40e_nvm.c:186]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/i40e/i40e_ethdev.c:2070]: (error) Shifting 32-bit value by 36 bits
> is undefined behaviour
> [drivers/net/i40e/i40e_ethdev.c:2070]: (error) Signed integer overflow for
> expression '1<<cnt'.
> [drivers/net/i40e/i40e_ethdev.c:11079]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/i40e/i40e_pf.c:1214]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/i40e/i40e_pf.c:1216]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/ixgbe/base/ixgbe_type.h:3651]: (error) syntax error
> [drivers/net/mlx4/mlx4_flow.c:303]: (warning) Possible null pointer dereference:
> mask
> [drivers/net/mlx4/mlx4_rxtx.c:266]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/mlx4/mlx4_rxtx.c:624]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/mlx4/mlx4_txq.c:89]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/mlx4/mlx4_txq.c:91]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [drivers/net/nfp/nfp_net.c:317]: (error) Shifting signed 32-bit value by 31 bits
> is undefined behaviour
> [drivers/net/nfp/nfp_net.c:558]: (error) Shifting signed 32-bit value by 31 bits
> is undefined behaviour
> [drivers/net/nfp/nfp_net.c:565]: (error) Shifting signed 32-bit value by 31 bits
> is undefined behaviour
> [drivers/net/nfp/nfp_net.c:573]: (error) Shifting signed 32-bit value by 31 bits
> is undefined behaviour
> [drivers/net/qede/base/ecore_dev.c:230]: (error) syntax error
> [drivers/net/qede/base/ecore_hw.c:74]: (error) syntax error
> [drivers/net/qede/base/ecore_init_fw_funcs.c:624]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:628]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:649]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:651]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:685]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:725]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:727]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:935]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:988]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_init_fw_funcs.c:1743]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_int.c:1033]: (error) Array 'p_aeu->bits[32]'
> accessed at index 9998, which is out of bounds.
> [drivers/net/qede/base/ecore_int.c:1074]: (error) Array
> 'sb_attn_sw->p_aeu_desc[i].bits[32]' accessed at index 9998, which is out of bounds.
> [drivers/net/qede/base/ecore_int.c:1382]: (error) Array 'aeu_descs[i].bits[32]'
> accessed at index 9998, which is out of bounds.
> [drivers/net/qede/base/ecore_int.c:1981]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_int.c:1986]: (error) Shifting signed 32-bit value
> by 31 bits is undefined behaviour
> [drivers/net/qede/base/ecore_l2.c:80]: (error) syntax error
> [drivers/net/qede/base/ecore_mcp.c:253]: (error) syntax error
> [drivers/net/qede/base/ecore_mng_tlv.c:1450]: (error) failed to expand
> 'OSAL_WARN', Wrong number of parameters for macro 'OSAL_WARN'.
> [drivers/net/qede/base/ecore_spq.c:590]: (error) syntax error
> [drivers/net/sfc/base/efx_ev.c:158]: (error) Uninitialized variable: eevop
> [drivers/net/sfc/base/efx_ev.c:161]: (error) Uninitialized variable: eevop
> [drivers/net/sfc/base/efx_intr.c:147]: (error) Uninitialized variable: eiop
> [drivers/net/sfc/base/efx_intr.c:150]: (error) Uninitialized variable: eiop
> [drivers/net/sfc/base/efx_mac.c:870]: (error) Uninitialized variable: emop
> [drivers/net/sfc/base/efx_mon.c:82]: (error) Uninitialized variable: emop
> [drivers/net/sfc/base/efx_phy.c:94]: (error) Uninitialized variable: epop
> [drivers/net/sfc/base/efx_rx.c:235]: (error) Uninitialized variable: erxop
> [drivers/net/sfc/base/efx_rx.c:238]: (error) Uninitialized variable: erxop
> [drivers/net/sfc/base/efx_tx.c:262]: (error) Uninitialized variable: etxop
> [drivers/net/sfc/base/efx_tx.c:265]: (error) Uninitialized variable: etxop
> [drivers/net/softnic/rte_eth_softnic_tm.c:2450]: (error) syntax error
> [drivers/net/tap/tap_bpf_program.c:109]: (error) Shifting signed 32-bit value by
> 31 bits is undefined behaviour
> [drivers/net/tap/tap_netlink.c:233]: (warning) Possible null pointer
> dereference: data
> [drivers/net/tap/tap_tcmsgs.c:127]: (error) Uninitialized variable: opt
> [examples/bbdev_app/main.c:597]: (error) Memory pointed to by 'xstats' is freed
> twice.
> [examples/bbdev_app/main.c:604]: (error) Memory pointed to by 'xstats' is freed
> twice.
> [examples/flow_filtering/main.c:265]: (error) Signed integer overflow for
> expression '(192<<24)+(168<<16)'.
> [examples/flow_filtering/main.c:265]: (error) Signed integer overflow for
> expression '(192<<24)+(168<<16)+(1<<8)'.
> [examples/flow_filtering/main.c:265]: (error) Signed integer overflow for
> expression '(192<<24)+(168<<16)+(1<<8)+1'.
> [examples/vhost/main.c:388]: (error) Common realloc mistake: 'socket_files'
> nulled but not freed upon failure
> [kernel/linux/kni/ethtool/igb/e1000_82575.c:2270]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [kernel/linux/kni/ethtool/igb/e1000_82575.c:2272]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [kernel/linux/kni/ethtool/igb/e1000_82575.c:2279]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [kernel/linux/kni/ethtool/igb/e1000_82575.c:2281]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [kernel/linux/kni/ethtool/ixgbe/ixgbe_82599.c:1487]: (error) Shifting signed
> 32-bit value by 31 bits is undefined behaviour
> [lib/librte_acl/acl_gen.c:166]: (error) Shifting signed 32-bit value by 31 bits
> is undefined behaviour
> [lib/librte_eal/common/rte_reciprocal.c:105]: (error) Shifting signed 32-bit
> value by 31 bits is undefined behaviour
> [lib/librte_eal/common/rte_service.c:750]: (warning) Possible null pointer
> dereference: f
> [lib/librte_eal/linuxapp/eal/eal_interrupts.c:423]: (error) syntax error
> [lib/librte_eal/linuxapp/eal/eal_memory.c:79]: (error) Uninitialized variable: tmp
> [lib/librte_eal/linuxapp/eal/eal_vfio.c:1803]: (error) Uninitialized variable:
> cur_grp
> [lib/librte_net/rte_net_crc.c:72]: (error) Shifting signed 32-bit value by 31
> bits is undefined behaviour
> [lib/librte_vhost/vdpa.c:74]: (error, inconclusive) Array 'vdpa_devices[1024]'
> accessed at index 1024, which is out of bounds.
> [test/test/test_reorder.c:272]: (error) Array 'robufs[8]' accessed at index 8,
> which is out of bounds.
> 



More information about the dev mailing list