linux/include/rdma
Jason Gunthorpe 467f432a52 RDMA/core: Split port and device counter sysfs attributes
This code creates a 'struct hw_stats_attribute' for each sysfs entry that
contains a naked 'struct attribute' inside.

It then proceeds to attach this same structure to a 'struct device' kobj
and a 'struct ib_port' kobj. However, this violates the typing
requirements.  'struct device' requires the attribute to be a 'struct
device_attribute' and 'struct ib_port' requires the attribute to be
'struct port_attribute'.

This happens to work because the show/store function pointers in all three
structures happen to be at the same offset and happen to be nearly the
same signature. This means when container_of() was used to go between the
wrong two types it still managed to work.

However clang CFI detection notices that the function pointers have a
slightly different signature. As with show/store this was only working
because the device and port struct layouts happened to have the kobj at
the front.

Correct this by have two independent sets of data structures for the port
and device case. The two different attributes correctly include the
port/device_attribute struct and everything from there up is kept
split. The show/store function call chains start with device/port unique
functions that invoke a common show/store function pointer.

Link: https://lore.kernel.org/r/a8b3864b4e722aed3657512af6aa47dc3c5033be.1623427137.git.leonro@nvidia.com
Reported-by: Nathan Chancellor <nathan@kernel.org>
Tested-by: Nathan Chancellor <nathan@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
2021-06-16 20:58:29 -03:00
..
ib_addr.h net: don't include ethtool.h from netdevice.h 2020-11-23 17:27:04 -08:00
ib_cache.h RDMA: Support more than 255 rdma ports 2021-03-26 09:31:21 -03:00
ib_cm.h RDMA/cm: Remove unused cm_class 2020-08-18 15:43:07 -03:00
ib_hdrs.h IB/hfi1: Move a function from a header file into a .c file 2021-05-28 20:21:20 -03:00
ib_mad.h IB/cm: Simplify ib_cancel_mad() and ib_modify_mad() calls 2021-06-02 15:41:58 -03:00
ib_marshall.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
ib_pack.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
ib_pma.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
ib_sa.h RDMA: Support more than 255 rdma ports 2021-03-26 09:31:21 -03:00
ib_smi.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
ib_umem_odp.h IB/core: Enable ODP sync without faulting 2020-10-01 16:44:05 -03:00
ib_umem.h RDMA/umem: Support importing dma-buf as user memory region 2021-01-20 16:07:52 -04:00
ib_verbs.h RDMA/core: Split port and device counter sysfs attributes 2021-06-16 20:58:29 -03:00
ib.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
iba.h RDMA/cm: Add SET/GET implementations to hide IBA wire format 2020-01-25 15:05:59 -04:00
ibta_vol1_c12.h RDMA/cm: Add Enhanced Connection Establishment (ECE) bits 2020-05-27 16:05:05 -03:00
iw_cm.h RDMA/iwcm: Allow AFONLY binding for IPv6 addresses 2021-03-10 15:30:45 -04:00
iw_portmap.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
lag.h RDMA/core: Add LAG functionality 2020-05-02 20:19:54 -03:00
mr_pool.h Linux 5.2-rc6 2019-06-28 21:18:23 -03:00
opa_addr.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_port_info.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_smi.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
opa_vnic.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdma_cm_ib.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdma_cm.h IB/cma: Introduce rdma_set_min_rnr_timer() 2021-04-12 19:51:48 -03:00
rdma_counter.h RDMA: Support more than 255 rdma ports 2021-03-26 09:31:21 -03:00
rdma_netlink.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdma_vt.h RDMA: Fix a typo 2021-03-26 14:07:36 -03:00
rdmavt_cq.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdmavt_mr.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
rdmavt_qp.h RDMA 5.9 merge window pull request 2020-08-06 16:43:36 -07:00
restrack.h RDMA/restrack: Add support to get resource tracking for SRQ 2021-04-22 10:30:27 -03:00
rw.h RDMA: Support more than 255 rdma ports 2021-03-26 09:31:21 -03:00
signature.h RDMA: Make most headers compile stand alone 2019-07-25 13:58:47 -03:00
tid_rdma_defs.h IB/hfi1: Build TID RDMA WRITE request 2019-02-05 18:07:43 -05:00
uverbs_ioctl.h RDMA/uverbs: Fix -Wunused-function warning 2021-04-01 15:28:49 -03:00
uverbs_named_ioctl.h RDMA/uverbs: Make UVERBS_OBJECT_METHODS to consider line number 2021-04-13 19:36:35 -03:00
uverbs_std_types.h RDMA/include: Replace license text with SPDX tags 2020-07-29 14:48:36 -03:00
uverbs_types.h RDMA/uverbs: Allow drivers to create a new HW object during rereg_mr 2020-12-07 14:06:23 -04:00