RDMA/bnxt: Fix structure layout for bnxt_re_pd_resp
authorJason Gunthorpe <jgg@mellanox.com>
Fri, 16 Mar 2018 03:18:14 +0000 (21:18 -0600)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 19 Mar 2018 17:41:40 +0000 (11:41 -0600)
commit958d2c1ba37680b765a089dc374cc199fb61619b
tree87a9c84265096138f232de4a8f8df6ce3ac821f3
parent7672ed33c4c15dbe9d56880683baaba4227cf940
RDMA/bnxt: Fix structure layout for bnxt_re_pd_resp

What is going on here is a bit subtle, in the kernel there is no
problem because the struct is copied using copy_from_user, so it
can safely have an 8 byte alignment, however in userspace it must
be constructed by concatenation with the ib_uverbs_alloc_pd_resp
struct. This is due to the required memory layout to execute the
command.

Since ibv_uverbs_alloc_pd_resp is only 4 bytes long, this causes
misalignment, and the user space will experience an unexpected padding.
Currently it works around this via pointer maths.

Make everything more robust by having the compiler reduce the alignment
of the struct to 4. The userspace has assertions to ensure this
works properly in all situations.

Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
include/uapi/rdma/bnxt_re-abi.h