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: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
89d9e8d3f1
commit
6c976c30ad
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue