> From: Morten Brørup [mailto:m...@smartsharesystems.com] > Sent: Saturday, 3 December 2022 15.23 > > Add "nonnull" function attribute to help the compiler detect a NULL > pointer being passed to a function not accepting NULL pointers as an > argument at build time. > > Add "access" function attribute to tell the compiler how a function > accesses its pointer arguments. > > Add these attributes to the rte_memcpy() function, as the first in > hopefully many to come.
Notes about Warnings/Errors reported in Patchwork [1]: * The checkpatch warning is about the attributes being defined. This is the purpose of the patch, and I don't know how to do it without getting a checkpatch warning. * The errors are previously uncaught bugs elsewhere, now being caught by GCC versions >= 10.4.0 due to these new attributes. I have reported these as [Bug 1146]. It shows some actual usefulness of the attributes in this patch, and provides a good example of why we should decorate many more functions with them. [1]: https://patchwork.dpdk.org/project/dpdk/patch/20221203142244.17135-1...@smartsharesystems.com/ [Bug 1146]: https://bugs.dpdk.org/show_bug.cgi?id=1146 Example of previously uncaught bug: ../drivers/net/bnx2x/bnx2x_vfpf.c: In function ‘bnx2x_check_bull’: ../drivers/net/bnx2x/bnx2x_vfpf.c:57:17: error: ‘rte_memcpy’ writing 4 bytes into a region of size 2 overflows the destination [-Werror=stringop-overflow=] 57 | rte_memcpy(&bull->vlan, &sc->old_bulletin.vlan, RTE_VLAN_HLEN); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from ../drivers/net/bnx2x/bnx2x.h:29, from ../drivers/net/bnx2x/bnx2x_vfpf.c:8: ../drivers/net/bnx2x/bnx2x_vfpf.h:297:18: note: destination object ‘vlan’ of size 2 297 | uint16_t vlan; | ^~~~ ../drivers/net/bnx2x/bnx2x_vfpf.c:57:17: error: ‘rte_memcpy’ reading 4 bytes from a region of size 2 [-Werror=stringop-overread] 57 | rte_memcpy(&bull->vlan, &sc->old_bulletin.vlan, RTE_VLAN_HLEN); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../drivers/net/bnx2x/bnx2x_vfpf.h:297:18: note: source object ‘vlan’ of size 2 297 | uint16_t vlan; | ^~~~ In file included from ../lib/mempool/rte_mempool.h:48, from ../lib/mbuf/rte_mbuf.h:38, from ../lib/net/rte_ether.h:22, from ../lib/ethdev/rte_eth_ctrl.h:10, from ../lib/ethdev/rte_ethdev.h:1419, from ../lib/ethdev/ethdev_driver.h:24, from ../drivers/net/bnx2x/bnx2x_ethdev.h:34, from ../drivers/net/bnx2x/bnx2x.h:23: ../lib/eal/x86/include/rte_memcpy.h:869:1: note: in a call to function ‘rte_memcpy’ declared with attribute ‘access (read_only, 2, 3)’ 869 | rte_memcpy(void *dst, const void *src, size_t n) | ^~~~~~~~~~