]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
IB/uverbs: Return correct error for invalid PD in register MR
authorRoland Dreier <rolandd@cisco.com>
Thu, 22 Feb 2007 21:16:51 +0000 (13:16 -0800)
committerRoland Dreier <rolandd@cisco.com>
Thu, 22 Feb 2007 21:16:51 +0000 (13:16 -0800)
If no matching PD is found in ib_uverbs_reg_mr(), then the function
jumps to err_release without setting the return value ret.  This means
that ret will hold the return value of the call to ib_umem_get() a few
lines earlier; if the function reaches the point where it looks for
the PD, we know that ib_umem_get() must have returned 0, so
ib_uverbs_reg_mr() ends up return 0 for a bad PD ID.  Fix this by
setting ret to -EINVAL before jumping to the exit path when no PD is
found.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/core/uverbs_cmd.c

index df1efbc10882692b7de5a690d31cd8d79dec05a4..4fd75afa6a3a90689a12a27c2c8edce5f076fb7d 100644 (file)
@@ -622,8 +622,10 @@ ssize_t ib_uverbs_reg_mr(struct ib_uverbs_file *file,
        obj->umem.virt_base = cmd.hca_va;
 
        pd = idr_read_pd(cmd.pd_handle, file->ucontext);
-       if (!pd)
+       if (!pd) {
+               ret = -EINVAL;
                goto err_release;
+       }
 
        mr = pd->device->reg_user_mr(pd, &obj->umem, cmd.access_flags, &udata);
        if (IS_ERR(mr)) {