[openib-general] RE: [PATCH] core/ib_uverbs: fix error flow in ib_uverbs_create_cq

Jack Morgenstein jackm at mellanox.co.il
Sat Jan 7 23:02:48 PST 2006


Agreed, good catch!
Jack

-----Original Message-----
From: Roland Dreier [mailto:rdreier at cisco.com] 
Sent: Saturday, January 07, 2006 2:43 AM
To: Jack Morgenstein
Cc: rolandd at cisco.com; openib-general at openib.org
Subject: Re: [PATCH] core/ib_uverbs: fix error flow in
ib_uverbs_create_cq

Good catch.  I think we also should fail the create CQ operation if
userspace asks for a completion channel and we don't find it, so I
committed the patch below.

 - R.

--- infiniband/core/uverbs_cmd.c	(revision 4798)
+++ infiniband/core/uverbs_cmd.c	(working copy)
@@ -594,13 +594,18 @@ ssize_t ib_uverbs_create_cq(struct ib_uv
 	if (cmd.comp_vector >= file->device->num_comp_vectors)
 		return -EINVAL;
 
-	if (cmd.comp_channel >= 0)
-		ev_file = ib_uverbs_lookup_comp_file(cmd.comp_channel);
-
 	uobj = kmalloc(sizeof *uobj, GFP_KERNEL);
 	if (!uobj)
 		return -ENOMEM;
 
+	if (cmd.comp_channel >= 0) {
+		ev_file = ib_uverbs_lookup_comp_file(cmd.comp_channel);
+		if (!ev_file) {
+			ret = -EINVAL;
+			goto err;
+		}
+	}
+
 	uobj->uobject.user_handle   = cmd.user_handle;
 	uobj->uobject.context       = file->ucontext;
 	uobj->uverbs_file	    = file;
@@ -664,6 +669,8 @@ err_up:
 	ib_destroy_cq(cq);
 
 err:
+	if (ev_file)
+		ib_uverbs_release_ucq(file, ev_file, uobj);
 	kfree(uobj);
 	return ret;
 }



More information about the general mailing list