> The DPDK has a lot of unnecessary usage of rte_memcpy.
> This patch set replaces cases where rte_memcpy is used with a fixed
> size constant size.
> 
> Typical example is:
>       rte_memcpy(mac_addrs, mac.addr_bytes, RTE_ETHER_ADDR_LEN);
> which can be replaced with:
>       memcpy(mac_addrs, mac.addr_bytes, RTE_ETHER_ADDR_LEN);
> 
> This does not change the resulting binary on almost all architectures
> because x86 version of intrisics and glibc are the same, and
> other architectures were using __builtin_constant_p().
> 
> The main benefit is that analysis tools like fortify, Coverity, and ASAN
> analyzers can check these memcpy's.
> 
> The first patch is a simple coccinelle script to do the replacement
> and the rest are the results broken out by module. The script can be used
> again to make sure more bad usage doesn't creep in with new drivers.
> 
> v3 - rebase and rerun coccinelle script on 24.03
>    - consolidate patches by subtree
>    - remove inclusion of rte_memcpy.h when no longer used.
> 
> Stephen Hemminger (30):
>   cocci/rte_memcpy: add script to eliminate fixed size rte_memcpy
>   eal: replace use of fixed size rte_memcpy
>   ethdev: replace use of fixed size rte_memcpy
>   eventdev: replace use of fixed size rte_memcpy
>   cryptodev: replace use of fixed size rte_memcpy
>   ip_frag: replace use of fixed size rte_memcpy
>   net: replace use of fixed size rte_memcpy
>   lpm: replace use of fixed size rte_memcpy
>   node: replace use of fixed size rte_memcpy
>   pdcp: replace use of fixed size rte_memcpy
>   pipeline: replace use of fixed size rte_memcpy
>   rib: replace use of fixed size rte_memcpy
>   security: replace use of fixed size rte_memcpy
>   bus: remove unneeded rte_memcpy.h include
>   net: replace use of fixed size rte_memcpy
>   raw: replace use of fixed size rte_memcpy
>   baseband: replace use of fixed size rte_memcpy
>   common: replace use of fixed size rte_memcpy
>   crypto: replace use of fixed size rte_memcpy
>   crypto: replace use of fixed size rte_memcpy
>   event: replace use of fixed size rte_memcpy
>   mempool: replace use of fixed size rte_memcpy
>   ml/cnxk: replace use of fixed size rte_memcpy
>   app/test-pmd: replace use of fixed size rte_memcpy
>   app/graph: replace use of fixed size rte_memcpy
>   app/test-eventdev: replace use of fixed size rte_memcpy
>   app/test: replace use of fixed size rte_memcpy
>   app/test-pipeline: remove unused rte_memcpy.h include
>   app/test-bbdev: remove unnecessary include of rte_memcpy.h
>   examples: replace use of fixed size rte_memcpy
> 
>  app/graph/neigh.c                             |   8 +-
>  app/test-bbdev/test_bbdev.c                   |   1 -
>  app/test-eventdev/test_pipeline_common.c      |  19 ++-
>  app/test-pipeline/config.c                    |   1 -
>  app/test-pipeline/init.c                      |   1 -
>  app/test-pipeline/main.c                      |   1 -
>  app/test-pipeline/runtime.c                   |   1 -
>  app/test-pmd/cmdline.c                        |  48 ++++----
>  app/test-pmd/cmdline_flow.c                   |  24 ++--
>  app/test-pmd/config.c                         |   8 +-
>  app/test-pmd/csumonly.c                       |   1 -
>  app/test-pmd/flowgen.c                        |   1 -
>  app/test-pmd/iofwd.c                          |   1 -
>  app/test-pmd/macfwd.c                         |   1 -
>  app/test-pmd/macswap.c                        |   1 -
>  app/test-pmd/noisy_vnf.c                      |   1 -
>  app/test-pmd/rxonly.c                         |   1 -
>  app/test-pmd/testpmd.c                        |   1 -
>  app/test/commands.c                           |   1 -
>  app/test/packet_burst_generator.c             |   4 +-
>  app/test/test_crc.c                           |   5 +-
>  app/test/test_cryptodev.c                     |  18 ++-
>  app/test/test_cryptodev_asym.c                |   1 -
>  app/test/test_cryptodev_security_pdcp.c       |   1 -
>  app/test/test_efd.c                           |   1 -
>  app/test/test_efd_perf.c                      |   1 -
>  app/test/test_event_crypto_adapter.c          |  12 +-
>  app/test/test_event_dma_adapter.c             |   4 +-
>  app/test/test_eventdev.c                      |   1 -
>  app/test/test_ipsec.c                         |   6 +-
>  app/test/test_link_bonding_mode4.c            |   8 +-
>  app/test/test_mbuf.c                          |   1 -
>  app/test/test_member.c                        |   1 -
>  app/test/test_member_perf.c                   |   1 -
>  app/test/test_rawdev.c                        |   1 -
>  app/test/test_security_inline_proto.c         |  36 +++---
>  app/test/test_service_cores.c                 |   1 -
>  app/test/virtual_pmd.c                        |   3 +-
>  devtools/cocci/rte_memcpy.cocci               |  11 ++
>  drivers/baseband/acc/rte_acc100_pmd.c         |  17 ++-
>  drivers/baseband/acc/rte_vrb_pmd.c            |  21 ++--
>  drivers/baseband/la12xx/bbdev_la12xx.c        |   4 +-
>  drivers/bus/auxiliary/linux/auxiliary.c       |   1 -
>  drivers/bus/fslmc/fslmc_bus.c                 |   1 -
>  drivers/bus/fslmc/fslmc_vfio.c                |   1 -
>  drivers/bus/fslmc/portal/dpaa2_hw_dpbp.c      |   1 -
>  drivers/bus/fslmc/portal/dpaa2_hw_dpci.c      |   1 -
>  drivers/bus/fslmc/portal/dpaa2_hw_dpio.c      |   1 -
>  drivers/bus/pci/linux/pci.c                   |   1 -
>  drivers/common/idpf/idpf_common_device.c      |   4 +-
>  drivers/common/idpf/idpf_common_virtchnl.c    |  10 +-
>  drivers/common/qat/qat_qp.c                   |  10 +-
>  drivers/compress/qat/qat_comp.c               |   8 +-
>  drivers/crypto/ccp/ccp_crypto.c               |  14 +--
>  drivers/crypto/cnxk/cnxk_cryptodev_ops.c      |   2 +-
>  drivers/crypto/cnxk/cnxk_se.h                 |   2 +-
>  drivers/crypto/dpaa_sec/dpaa_sec.c            |   2 +-
>  drivers/crypto/ipsec_mb/pmd_snow3g.c          |   4 +-
>  drivers/crypto/qat/qat_sym_session.c          |  52 ++++-----
>  .../scheduler/rte_cryptodev_scheduler.c       |   6 +-
>  drivers/crypto/scheduler/scheduler_failover.c |  12 +-
>  drivers/event/cnxk/cnxk_eventdev_selftest.c   |   1 -
>  drivers/event/cnxk/cnxk_tim_evdev.c           |   4 +-
>  drivers/event/dlb2/dlb2.c                     |   4 +-
>  drivers/event/dpaa/dpaa_eventdev.c            |   1 -
>  drivers/event/dpaa2/dpaa2_eventdev.c          |   7 +-
>  drivers/event/dpaa2/dpaa2_eventdev_selftest.c |   1 -
>  drivers/event/dpaa2/dpaa2_hw_dpcon.c          |   1 -
>  drivers/event/octeontx/ssovf_evdev_selftest.c |   1 -
>  drivers/event/octeontx/timvf_evdev.c          |   4 +-
>  drivers/mempool/dpaa/dpaa_mempool.c           |   4 +-
>  drivers/mempool/dpaa2/dpaa2_hw_mempool.c      |   5 +-
>  drivers/ml/cnxk/cn10k_ml_model.c              |   8 +-
>  drivers/ml/cnxk/cn10k_ml_ops.c                |  11 +-
>  drivers/ml/cnxk/cnxk_ml_ops.c                 |   2 +-
>  drivers/ml/cnxk/mvtvm_ml_model.c              |   8 +-
>  drivers/ml/cnxk/mvtvm_ml_ops.c                |   8 +-
>  drivers/net/af_xdp/rte_eth_af_xdp.c           |   2 +-
>  drivers/net/avp/avp_ethdev.c                  |   4 +-
>  drivers/net/axgbe/axgbe_ethdev.c              |   4 +-
>  drivers/net/bnx2x/bnx2x.c                     |  32 +++--
>  drivers/net/bnxt/bnxt_flow.c                  |  34 +++---
>  drivers/net/bonding/rte_eth_bond_8023ad.c     |   4 +-
>  drivers/net/bonding/rte_eth_bond_flow.c       |   2 +-
>  drivers/net/cnxk/cnxk_eswitch_devargs.c       |   3 +-
>  drivers/net/cnxk/cnxk_ethdev_ops.c            |   2 +-
>  drivers/net/cnxk/cnxk_rep.c                   |   3 +-
>  drivers/net/cnxk/cnxk_rep_flow.c              |   6 +-
>  drivers/net/cnxk/cnxk_rep_msg.c               |   8 +-
>  drivers/net/cnxk/cnxk_rep_ops.c               |   2 +-
>  drivers/net/cnxk/cnxk_tm.c                    |   5 +-
>  drivers/net/cpfl/cpfl_ethdev.c                |   3 +-
>  drivers/net/cpfl/cpfl_vchnl.c                 |   4 +-
>  drivers/net/cxgbe/clip_tbl.c                  |   2 +-
>  drivers/net/cxgbe/cxgbe_filter.c              |   8 +-
>  drivers/net/cxgbe/l2t.c                       |   4 +-
>  drivers/net/cxgbe/smt.c                       |  20 ++--
>  drivers/net/dpaa2/base/dpaa2_hw_dpni.c        |   1 -
>  drivers/net/dpaa2/dpaa2_ethdev.c              |   1 -
>  drivers/net/dpaa2/dpaa2_recycle.c             |   1 -
>  drivers/net/dpaa2/dpaa2_rxtx.c                |   1 -
>  drivers/net/dpaa2/dpaa2_sparser.c             |   1 -
>  drivers/net/dpaa2/dpaa2_tm.c                  |   2 +-
>  drivers/net/e1000/em_rxtx.c                   |   1 -
>  drivers/net/e1000/igb_flow.c                  |  22 ++--
>  drivers/net/e1000/igb_pf.c                    |   7 +-
>  drivers/net/e1000/igb_rxtx.c                  |   1 -
>  drivers/net/enic/enic_main.c                  |   8 +-
>  drivers/net/failsafe/failsafe_ops.c           |   6 +-
>  drivers/net/gve/base/gve_adminq.c             |   2 +-
>  drivers/net/hinic/hinic_pmd_ethdev.c          |   1 -
>  drivers/net/hinic/hinic_pmd_flow.c            |  40 +++----
>  drivers/net/hns3/hns3_fdir.c                  |   2 +-
>  drivers/net/hns3/hns3_flow.c                  |   4 +-
>  drivers/net/i40e/i40e_ethdev.c                | 109 ++++++++----------
>  drivers/net/i40e/i40e_fdir.c                  |  28 +++--
>  drivers/net/i40e/i40e_flow.c                  |  56 +++++----
>  drivers/net/i40e/i40e_pf.c                    |   3 +-
>  drivers/net/i40e/i40e_tm.c                    |  11 +-
>  drivers/net/i40e/rte_pmd_i40e.c               |  34 +++---
>  drivers/net/iavf/iavf_fdir.c                  |  93 +++++++--------
>  drivers/net/iavf/iavf_fsub.c                  |  50 ++++----
>  drivers/net/iavf/iavf_generic_flow.c          |   2 +-
>  drivers/net/iavf/iavf_tm.c                    |  11 +-
>  drivers/net/iavf/iavf_vchnl.c                 |   9 +-
>  drivers/net/ice/ice_dcf.c                     |   5 +-
>  drivers/net/ice/ice_dcf_parent.c              |   2 +-
>  drivers/net/ice/ice_dcf_sched.c               |  11 +-
>  drivers/net/ice/ice_diagnose.c                |   4 +-
>  drivers/net/ice/ice_ethdev.c                  |  14 +--
>  drivers/net/ice/ice_fdir_filter.c             |  37 +++---
>  drivers/net/ice/ice_generic_flow.c            |   2 +-
>  drivers/net/ice/ice_hash.c                    |   2 +-
>  drivers/net/ice/ice_tm.c                      |  11 +-
>  drivers/net/idpf/idpf_ethdev.c                |   7 +-
>  drivers/net/idpf/idpf_rxtx.c                  |  10 +-
>  drivers/net/ipn3ke/ipn3ke_flow.c              |  32 +++--
>  drivers/net/ipn3ke/ipn3ke_representor.c       |  16 +--
>  drivers/net/ipn3ke/ipn3ke_tm.c                |   6 +-
>  drivers/net/ixgbe/ixgbe_ethdev.c              |   9 +-
>  drivers/net/ixgbe/ixgbe_fdir.c                |   7 +-
>  drivers/net/ixgbe/ixgbe_flow.c                |  65 +++++------
>  drivers/net/ixgbe/ixgbe_ipsec.c               |   8 +-
>  drivers/net/ixgbe/ixgbe_pf.c                  |   5 +-
>  drivers/net/ixgbe/ixgbe_tm.c                  |  11 +-
>  drivers/net/ixgbe/rte_pmd_ixgbe.c             |   4 +-
>  drivers/net/memif/memif_socket.c              |   4 +-
>  drivers/net/mlx5/mlx5_devx.c                  |   4 +-
>  drivers/net/mlx5/mlx5_flow.c                  |  38 +++---
>  drivers/net/mlx5/mlx5_flow_aso.c              |   6 +-
>  drivers/net/mlx5/mlx5_flow_hw.c               |  27 ++---
>  drivers/net/mlx5/mlx5_rx.c                    |   6 +-
>  drivers/net/mlx5/mlx5_rxtx_vec.c              |   8 +-
>  drivers/net/mvpp2/mrvl_tm.c                   |   2 +-
>  drivers/net/netvsc/hn_ethdev.c                |   1 -
>  drivers/net/nfp/flower/nfp_conntrack.c        |   2 +-
>  drivers/net/nfp/flower/nfp_flower_flow.c      |  16 +--
>  .../net/nfp/flower/nfp_flower_representor.c   |   2 +-
>  drivers/net/nfp/nfp_mtr.c                     |  10 +-
>  drivers/net/ngbe/ngbe_pf.c                    |   4 +-
>  drivers/net/null/rte_eth_null.c               |   6 +-
>  drivers/net/pcap/pcap_ethdev.c                |   2 +-
>  drivers/net/pcap/pcap_osdep_freebsd.c         |   3 +-
>  drivers/net/pcap/pcap_osdep_linux.c           |   3 +-
>  drivers/net/qede/qede_main.c                  |   2 +-
>  drivers/net/ring/rte_eth_ring.c               |   1 -
>  drivers/net/sfc/sfc.c                         |   2 +-
>  drivers/net/sfc/sfc_ef10_tx.c                 |   2 +-
>  drivers/net/sfc/sfc_ethdev.c                  |  11 +-
>  drivers/net/sfc/sfc_flow.c                    |  20 ++--
>  drivers/net/sfc/sfc_flow_rss.c                |   2 +-
>  drivers/net/sfc/sfc_mae.c                     |   2 +-
>  drivers/net/sfc/sfc_rx.c                      |   2 +-
>  drivers/net/sfc/sfc_tso.c                     |   2 +-
>  drivers/net/sfc/sfc_tso.h                     |   9 +-
>  drivers/net/tap/rte_eth_tap.c                 |  14 +--
>  drivers/net/txgbe/txgbe_ethdev.c              |   9 +-
>  drivers/net/txgbe/txgbe_fdir.c                |   6 +-
>  drivers/net/txgbe/txgbe_flow.c                |  65 +++++------
>  drivers/net/txgbe/txgbe_ipsec.c               |   8 +-
>  drivers/net/txgbe/txgbe_pf.c                  |   5 +-
>  drivers/net/txgbe/txgbe_tm.c                  |  11 +-
>  drivers/net/vhost/rte_eth_vhost.c             |   1 -
>  drivers/net/virtio/virtio_ethdev.c            |   1 -
>  drivers/raw/ifpga/afu_pmd_he_hssi.c           |   3 +-
>  drivers/raw/ifpga/afu_pmd_he_lpbk.c           |   3 +-
>  drivers/raw/ifpga/afu_pmd_he_mem.c            |   3 +-
>  drivers/raw/ifpga/afu_pmd_n3000.c             |   8 +-
>  drivers/raw/ifpga/ifpga_rawdev.c              |  11 +-
>  drivers/raw/skeleton/skeleton_rawdev.c        |   8 +-
>  drivers/raw/skeleton/skeleton_rawdev_test.c   |   1 -
>  examples/bbdev_app/main.c                     |   2 +-
>  examples/bond/main.c                          |   1 -
>  examples/ip_fragmentation/main.c              |   1 -
>  examples/ip_reassembly/main.c                 |   1 -
>  examples/ipv4_multicast/main.c                |   1 -
>  examples/l2fwd-cat/cat.c                      |   4 +-
>  examples/l2fwd-jobstats/main.c                |   1 -
>  examples/l2fwd-keepalive/main.c               |   1 -
>  examples/l2fwd-macsec/main.c                  |   1 -
>  examples/l2fwd/main.c                         |   1 -
>  examples/l3fwd-power/main.c                   |   1 -
>  examples/l3fwd/main.c                         |   1 -
>  examples/link_status_interrupt/main.c         |   1 -
>  .../client_server_mp/mp_server/init.c         |   1 -
>  .../client_server_mp/mp_server/main.c         |   1 -
>  examples/multi_process/symmetric_mp/main.c    |   1 -
>  examples/ptpclient/ptpclient.c                |  11 +-
>  examples/qos_sched/app_thread.c               |   1 -
>  examples/qos_sched/main.c                     |   1 -
>  examples/server_node_efd/efd_server/init.c    |   1 -
>  examples/server_node_efd/efd_server/main.c    |   1 -
>  examples/vhost/main.c                         |   6 +-
>  examples/vmdq/main.c                          |   6 +-
>  examples/vmdq_dcb/main.c                      |  15 +--
>  lib/cryptodev/rte_cryptodev.c                 |   2 +-
>  lib/eal/common/eal_common_options.c           |   7 +-
>  lib/ethdev/rte_ethdev.c                       |   3 +-
>  lib/ethdev/rte_flow.c                         |   5 +-
>  lib/eventdev/rte_event_crypto_adapter.c       |   2 +-
>  lib/eventdev/rte_event_dma_adapter.c          |   4 +-
>  lib/eventdev/rte_event_timer_adapter.c        |   2 +-
>  lib/fib/trie.c                                |   2 +-
>  lib/ip_frag/rte_ipv6_fragmentation.c          |   4 +-
>  lib/ip_frag/rte_ipv6_reassembly.c             |   6 +-
>  lib/lpm/rte_lpm6.c                            |   3 +-
>  lib/net/rte_ether.c                           |   2 +-
>  lib/node/ip6_lookup.c                         |   8 +-
>  lib/pdcp/pdcp_process.c                       |  36 +++---
>  lib/pipeline/rte_table_action.c               |   8 +-
>  lib/rib/rte_rib6.h                            |   5 +-
>  lib/security/rte_security.c                   |   4 +-
>  232 files changed, 886 insertions(+), 1045 deletions(-)
>  create mode 100644 devtools/cocci/rte_memcpy.cocci
> 
> --

Series-Acked-by: Konstantin Ananyev <konstantin.anan...@huawei.com>
 

> 2.43.0

Reply via email to