From: Shamir Rabinovitch <shamir.rabinovitch@xxxxxxxxxx> Helper function to initialize ufile member of structure uverbs_attr_bundle. This helper produce structure uverbs_attr_bundle that is safe for the below operations on the given ufile: - uobj_get_[read|write] - uobj_alloc_commit - uobj_alloc_abort The last 2 ops are more complicated. Abort for example triggers the below which pass the uverbs_attr_bundle driver_udata down to the drivers level: uobj_alloc_abort rdma_alloc_abort_uobject uverbs_destroy_uobject uobj->uapi_object->type_class->destroy_hw destroy_hw_idr_uobject idr_type->destroy_object uverbs_free_pd ib_dealloc_pd_user pd->device->ops.dealloc_pd mlx4_ib_dealloc_pd For more information about the potential issues, please see commit f89adedaf3fe ("RDMA/uverbs: Initialize udata struct on destroy flows") Cc: Gal Pressman <galpress@xxxxxxxxxx> Signed-off-by: Shamir Rabinovitch <shamir.rabinovitch@xxxxxxxxxx> Signed-off-by: Shamir Rabinovitch <srabinov7@xxxxxxxxx> --- drivers/infiniband/core/uverbs_cmd.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c index d1f0c04f0ae8..4f42f9732dca 100644 --- a/drivers/infiniband/core/uverbs_cmd.c +++ b/drivers/infiniband/core/uverbs_cmd.c @@ -3773,6 +3773,24 @@ static int ib_uverbs_ex_modify_cq(struct uverbs_attr_bundle *attrs) return ret; } +/** + * uverbs_init_attrs_ufile - Helper function to create minimal + * uverbs_attr_bundle out of ib_uverbs_file that is suitable + * for the below operations: + * + * - uobj_get_[read|write] + * - uobj_alloc_commit + * - uobj_alloc_abort + */ +static void uverbs_init_attrs_ufile(struct uverbs_attr_bundle *attrs_bundle, + struct ib_uverbs_file *ufile) +{ + *attrs_bundle = (struct uverbs_attr_bundle) { + .ufile = ufile, + .context = ufile->ucontext, + }; +} + /* * Describe the input structs for write(). Some write methods have an input * only struct, most have an input and output. If the struct has an output then -- 2.20.1