* [PATCH v3 0/3] treewide: Use sizeof_member() macro @ 2019-10-29 22:47 Kees Cook 2019-10-29 22:47 ` [PATCH v3 1/3] MIPS: OCTEON: Replace SIZEOF_FIELD() macro Kees Cook 2019-10-29 22:47 ` [PATCH v3 2/3] linux/stddef.h: Add sizeof_member() macro Kees Cook 0 siblings, 2 replies; 3+ messages in thread From: Kees Cook @ 2019-10-29 22:47 UTC (permalink / raw) To: Linus Torvalds Cc: Kees Cook, Pankaj Bharadiya, Alexey Dobriyan, David S. Miller, Randy Dunlap, Andrew Morton, netdev, linux-arch, linux-fsdevel, linux-kernel v3: resend, adjusted for minimizing linux-next interference v2: https://lore.kernel.org/lkml/20191010232345.26594-1-keescook@chromium.org v1: https://lore.kernel.org/lkml/201909261026.6E3381876C@keescook This is basically a resend of the heads-up for this tree I'm carrying for the v5.5 merge window to replace the various struct member sizeof macros with sizeof_member(). The CC list was insane, so I trimmed it to the major areas that get touched. Linus, if Alexey's argument on naming[1] does not convince you, please advise on what you want the final macro to be named and I will adjust. :) Dave, I converted your "no objection"[2] into an Acked-by; please yell if this is not desired. Thanks! -Kees [1] https://www.openwall.com/lists/kernel-hardening/2019/07/02/2 [2] https://lore.kernel.org/lkml/20191002.132121.402975401040540710.davem@davemloft.net Pankaj Bharadiya (3): MIPS: OCTEON: Replace SIZEOF_FIELD() macro linux/stddef.h: Add sizeof_member() macro treewide: Use sizeof_member() macro Documentation/process/coding-style.rst | 2 +- .../it_IT/process/coding-style.rst | 2 +- .../zh_CN/process/coding-style.rst | 2 +- arch/arc/kernel/unwind.c | 6 +- arch/arm64/include/asm/processor.h | 10 +- .../cavium-octeon/executive/cvmx-bootmem.c | 9 +- arch/powerpc/net/bpf_jit32.h | 4 +- arch/powerpc/net/bpf_jit_comp.c | 16 +- arch/sparc/net/bpf_jit_comp_32.c | 8 +- arch/x86/kernel/fpu/xstate.c | 2 +- block/blk-core.c | 4 +- crypto/adiantum.c | 4 +- crypto/essiv.c | 2 +- drivers/firmware/efi/efi.c | 2 +- drivers/gpu/drm/i915/gvt/scheduler.c | 2 +- drivers/infiniband/hw/efa/efa_verbs.c | 2 +- drivers/infiniband/hw/hfi1/sdma.c | 2 +- drivers/infiniband/hw/hfi1/verbs.h | 4 +- .../ulp/opa_vnic/opa_vnic_ethtool.c | 2 +- drivers/input/keyboard/applespi.c | 2 +- drivers/md/raid5-ppl.c | 2 +- drivers/media/platform/omap3isp/isppreview.c | 24 +-- drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 4 +- .../ethernet/cavium/liquidio/octeon_console.c | 16 +- .../net/ethernet/emulex/benet/be_ethtool.c | 2 +- .../hisilicon/hns3/hns3pf/hclge_main.c | 2 +- .../ethernet/hisilicon/hns3/hns3pf/hclge_tm.c | 2 +- .../net/ethernet/huawei/hinic/hinic_ethtool.c | 8 +- .../net/ethernet/intel/fm10k/fm10k_ethtool.c | 2 +- .../net/ethernet/intel/i40e/i40e_ethtool.c | 2 +- .../net/ethernet/intel/i40e/i40e_lan_hmc.c | 2 +- .../net/ethernet/intel/iavf/iavf_ethtool.c | 2 +- drivers/net/ethernet/intel/ice/ice_ethtool.c | 10 +- .../net/ethernet/intel/ice/ice_lan_tx_rx.h | 2 +- drivers/net/ethernet/intel/igb/igb_ethtool.c | 4 +- drivers/net/ethernet/intel/igc/igc_ethtool.c | 4 +- .../net/ethernet/intel/ixgb/ixgb_ethtool.c | 4 +- drivers/net/ethernet/intel/ixgbevf/ethtool.c | 4 +- drivers/net/ethernet/marvell/mv643xx_eth.c | 4 +- .../net/ethernet/mellanox/mlx4/en_ethtool.c | 2 +- .../ethernet/mellanox/mlx5/core/fpga/ipsec.c | 6 +- .../net/ethernet/mellanox/mlx5/core/fs_core.c | 4 +- .../ethernet/mellanox/mlxsw/spectrum_fid.c | 4 +- .../ethernet/mellanox/mlxsw/spectrum_ptp.c | 2 +- drivers/net/ethernet/netronome/nfp/bpf/jit.c | 10 +- drivers/net/ethernet/netronome/nfp/bpf/main.c | 2 +- .../net/ethernet/netronome/nfp/bpf/offload.c | 2 +- .../net/ethernet/netronome/nfp/flower/main.h | 2 +- .../oki-semi/pch_gbe/pch_gbe_ethtool.c | 2 +- drivers/net/ethernet/qlogic/qede/qede.h | 2 +- .../ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 2 +- .../ethernet/samsung/sxgbe/sxgbe_ethtool.c | 2 +- .../ethernet/stmicro/stmmac/stmmac_ethtool.c | 4 +- drivers/net/ethernet/ti/cpsw_ethtool.c | 6 +- drivers/net/ethernet/ti/netcp_ethss.c | 32 ++-- drivers/net/fjes/fjes_ethtool.c | 2 +- drivers/net/geneve.c | 2 +- drivers/net/hyperv/netvsc_drv.c | 2 +- drivers/net/usb/sierra_net.c | 2 +- drivers/net/usb/usbnet.c | 2 +- drivers/net/vxlan.c | 4 +- .../net/wireless/marvell/libertas/debugfs.c | 2 +- drivers/net/wireless/marvell/mwifiex/util.h | 4 +- drivers/s390/net/qeth_core_main.c | 2 +- drivers/s390/net/qeth_core_mpc.h | 10 +- drivers/scsi/aacraid/aachba.c | 4 +- drivers/scsi/be2iscsi/be_cmds.h | 2 +- drivers/scsi/cxgbi/libcxgbi.c | 2 +- drivers/scsi/smartpqi/smartpqi_init.c | 6 +- drivers/staging/qlge/qlge_ethtool.c | 2 +- drivers/target/iscsi/cxgbit/cxgbit_main.c | 2 +- drivers/usb/atm/usbatm.c | 2 +- drivers/usb/gadget/function/f_fs.c | 2 +- fs/befs/linuxvfs.c | 2 +- fs/crypto/keyring.c | 2 +- fs/ext2/super.c | 2 +- fs/ext4/super.c | 2 +- fs/freevxfs/vxfs_super.c | 2 +- fs/fuse/virtio_fs.c | 2 +- fs/orangefs/super.c | 2 +- fs/ufs/super.c | 2 +- fs/verity/enable.c | 2 +- include/linux/filter.h | 12 +- include/linux/kvm_host.h | 2 +- include/linux/phy_led_triggers.h | 2 +- include/linux/slab.h | 2 +- include/linux/stddef.h | 13 +- include/net/garp.h | 2 +- include/net/ip_tunnels.h | 6 +- include/net/mrp.h | 2 +- include/net/netfilter/nf_conntrack_helper.h | 2 +- include/net/netfilter/nf_tables_core.h | 2 +- include/net/sock.h | 2 +- ipc/util.c | 2 +- kernel/bpf/cgroup.c | 2 +- kernel/bpf/local_storage.c | 4 +- kernel/fork.c | 2 +- kernel/signal.c | 12 +- kernel/utsname.c | 2 +- net/802/mrp.c | 6 +- net/batman-adv/main.c | 2 +- net/bridge/br.c | 2 +- net/caif/caif_socket.c | 2 +- net/core/dev.c | 2 +- net/core/filter.c | 140 +++++++++--------- net/core/flow_dissector.c | 10 +- net/core/skbuff.c | 2 +- net/core/xdp.c | 4 +- net/dccp/proto.c | 2 +- net/ipv4/ip_gre.c | 4 +- net/ipv4/ip_vti.c | 4 +- net/ipv4/raw.c | 2 +- net/ipv4/tcp.c | 2 +- net/ipv6/ip6_gre.c | 4 +- net/ipv6/raw.c | 2 +- net/iucv/af_iucv.c | 2 +- net/netfilter/nf_tables_api.c | 4 +- net/netfilter/nfnetlink_cthelper.c | 2 +- net/netfilter/nft_ct.c | 12 +- net/netfilter/nft_masq.c | 2 +- net/netfilter/nft_nat.c | 6 +- net/netfilter/nft_redir.c | 2 +- net/netfilter/nft_tproxy.c | 4 +- net/netfilter/xt_RATEEST.c | 2 +- net/netlink/af_netlink.c | 2 +- net/openvswitch/datapath.c | 2 +- net/openvswitch/flow.h | 4 +- net/rxrpc/af_rxrpc.c | 2 +- net/sched/act_ct.c | 4 +- net/sched/cls_flower.c | 2 +- net/sctp/socket.c | 4 +- net/unix/af_unix.c | 2 +- security/integrity/ima/ima_policy.c | 4 +- sound/soc/codecs/hdmi-codec.c | 2 +- tools/testing/selftests/bpf/bpf_util.h | 6 +- virt/kvm/kvm_main.c | 2 +- 136 files changed, 340 insertions(+), 336 deletions(-) -- 2.17.1 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v3 1/3] MIPS: OCTEON: Replace SIZEOF_FIELD() macro 2019-10-29 22:47 [PATCH v3 0/3] treewide: Use sizeof_member() macro Kees Cook @ 2019-10-29 22:47 ` Kees Cook 2019-10-29 22:47 ` [PATCH v3 2/3] linux/stddef.h: Add sizeof_member() macro Kees Cook 1 sibling, 0 replies; 3+ messages in thread From: Kees Cook @ 2019-10-29 22:47 UTC (permalink / raw) To: Linus Torvalds Cc: Kees Cook, Pankaj Bharadiya, Alexey Dobriyan, David S. Miller, Randy Dunlap, Andrew Morton, netdev, linux-arch, linux-fsdevel, linux-kernel From: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com> In preparation for switching to a standard sizeof_member() macro to find the size of a member of a struct, remove the custom SIZEOF_FIELD() macro and use the more common FIELD_SIZEOF() instead. Later patches will globally replace FIELD_SIZEOF() and sizeof_field() with the more accurate sizeof_member(). Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com> Link: https://lore.kernel.org/r/20190924105839.110713-4-pankaj.laxminarayan.bharadiya@intel.com Co-developed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/mips/cavium-octeon/executive/cvmx-bootmem.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c index ba8f82a29a81..44b506a14666 100644 --- a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c +++ b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c @@ -44,13 +44,6 @@ static struct cvmx_bootmem_desc *cvmx_bootmem_desc; /* See header file for descriptions of functions */ -/** - * This macro returns the size of a member of a structure. - * Logically it is the same as "sizeof(s::field)" in C++, but - * C lacks the "::" operator. - */ -#define SIZEOF_FIELD(s, field) sizeof(((s *)NULL)->field) - /** * This macro returns a member of the * cvmx_bootmem_named_block_desc_t structure. These members can't @@ -65,7 +58,7 @@ static struct cvmx_bootmem_desc *cvmx_bootmem_desc; #define CVMX_BOOTMEM_NAMED_GET_FIELD(addr, field) \ __cvmx_bootmem_desc_get(addr, \ offsetof(struct cvmx_bootmem_named_block_desc, field), \ - SIZEOF_FIELD(struct cvmx_bootmem_named_block_desc, field)) + FIELD_SIZEOF(struct cvmx_bootmem_named_block_desc, field)) /** * This function is the implementation of the get macros defined -- 2.17.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v3 2/3] linux/stddef.h: Add sizeof_member() macro 2019-10-29 22:47 [PATCH v3 0/3] treewide: Use sizeof_member() macro Kees Cook 2019-10-29 22:47 ` [PATCH v3 1/3] MIPS: OCTEON: Replace SIZEOF_FIELD() macro Kees Cook @ 2019-10-29 22:47 ` Kees Cook 1 sibling, 0 replies; 3+ messages in thread From: Kees Cook @ 2019-10-29 22:47 UTC (permalink / raw) To: Linus Torvalds Cc: Kees Cook, Pankaj Bharadiya, Alexey Dobriyan, David S. Miller, Randy Dunlap, Andrew Morton, netdev, linux-arch, linux-fsdevel, linux-kernel From: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com> At present we have 2 different macros to calculate the size of a member of a struct: FIELD_SIZEOF() and sizeof_field(). As a prerequisite to bringing uniformity to the entire kernel source tree, add sizeof_member() macro as it is both more pleasant (not upper case) and more correct (sizeof()-family cannot operate on bit fields; this is meant to operate on struct members), as discussed[1]. Future patches will replace all occurrences of above macros with sizeof_member(). [1] https://www.openwall.com/lists/kernel-hardening/2019/07/02/2 Signed-off-by: Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@intel.com> Link: https://lore.kernel.org/r/20190924105839.110713-2-pankaj.laxminarayan.bharadiya@intel.com Co-developed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Kees Cook <keescook@chromium.org> --- include/linux/stddef.h | 13 ++++++++++++- tools/testing/selftests/bpf/bpf_util.h | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/linux/stddef.h b/include/linux/stddef.h index 998a4ba28eba..ecadb736c853 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h @@ -27,6 +27,17 @@ enum { */ #define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER)) +/** + * sizeof_member(TYPE, MEMBER) - get the size of a struct's member + * + * @TYPE: the target struct + * @MEMBER: the target struct's member + * + * Return: the size of @MEMBER in the struct definition without having a + * declared instance of @TYPE. + */ +#define sizeof_member(TYPE, MEMBER) (sizeof(((TYPE *)0)->MEMBER)) + /** * offsetofend(TYPE, MEMBER) * @@ -34,6 +45,6 @@ enum { * @MEMBER: The member within the structure to get the end offset of */ #define offsetofend(TYPE, MEMBER) \ - (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER)) + (offsetof(TYPE, MEMBER) + sizeof_member(TYPE, MEMBER)) #endif diff --git a/tools/testing/selftests/bpf/bpf_util.h b/tools/testing/selftests/bpf/bpf_util.h index ec219f84e041..6b4b3e24ba9f 100644 --- a/tools/testing/selftests/bpf/bpf_util.h +++ b/tools/testing/selftests/bpf/bpf_util.h @@ -31,13 +31,13 @@ static inline unsigned int bpf_num_possible_cpus(void) # define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #endif -#ifndef sizeof_field -#define sizeof_field(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER)) +#ifndef sizeof_member +#define sizeof_member(TYPE, MEMBER) sizeof((((TYPE *)0)->MEMBER)) #endif #ifndef offsetofend #define offsetofend(TYPE, MEMBER) \ - (offsetof(TYPE, MEMBER) + sizeof_field(TYPE, MEMBER)) + (offsetof(TYPE, MEMBER) + sizeof_member(TYPE, MEMBER)) #endif #endif /* __BPF_UTIL__ */ -- 2.17.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-10-29 22:48 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-10-29 22:47 [PATCH v3 0/3] treewide: Use sizeof_member() macro Kees Cook 2019-10-29 22:47 ` [PATCH v3 1/3] MIPS: OCTEON: Replace SIZEOF_FIELD() macro Kees Cook 2019-10-29 22:47 ` [PATCH v3 2/3] linux/stddef.h: Add sizeof_member() macro Kees Cook
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).