Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6c976c30 authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

IB/uverbs: Use inline data transfer for UHW_IN



The rule for the API is pointers less than 8 bytes are inlined into
the .data field of the attribute. Fix the creation of the driver udata
struct to follow this rule and point to the .data itself when the size
is less than 8 bytes.

Otherwise if the UHW struct is less than 8 bytes the driver will get
EFAULT during copy_from_user.

Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 89d9e8d3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -234,8 +234,11 @@ static void create_udata(struct uverbs_attr_bundle *ctx,
		uverbs_attr_get(ctx, UVERBS_UHW_OUT);

	if (!IS_ERR(uhw_in)) {
		udata->inbuf = uhw_in->ptr_attr.ptr;
		udata->inlen = uhw_in->ptr_attr.len;
		if (uverbs_attr_ptr_is_inline(uhw_in))
			udata->inbuf = &uhw_in->uattr->data;
		else
			udata->inbuf = uhw_in->ptr_attr.ptr;
	} else {
		udata->inbuf = NULL;
		udata->inlen = 0;