Skip to content

Commit

Permalink
RDMA/cma: rdma_bind_addr() leaks a cma_dev reference count
Browse files Browse the repository at this point in the history
rdma_bind_addr() leaks a cma_dev reference count in failure case.

Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
  • Loading branch information
krkumar authored and Roland Dreier committed Oct 31, 2006
1 parent 2e7a742 commit 255d0c1
Showing 1 changed file with 15 additions and 8 deletions.
23 changes: 15 additions & 8 deletions drivers/infiniband/core/cma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1762,22 +1762,29 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)

if (!cma_any_addr(addr)) {
ret = rdma_translate_ip(addr, &id->route.addr.dev_addr);
if (!ret) {
mutex_lock(&lock);
ret = cma_acquire_dev(id_priv);
mutex_unlock(&lock);
}
if (ret)
goto err;
goto err1;

mutex_lock(&lock);
ret = cma_acquire_dev(id_priv);
mutex_unlock(&lock);
if (ret)
goto err1;
}

memcpy(&id->route.addr.src_addr, addr, ip_addr_size(addr));
ret = cma_get_port(id_priv);
if (ret)
goto err;
goto err2;

return 0;
err:
err2:
if (!cma_any_addr(addr)) {
mutex_lock(&lock);
cma_detach_from_dev(id_priv);
mutex_unlock(&lock);
}
err1:
cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
return ret;
}
Expand Down

0 comments on commit 255d0c1

Please sign in to comment.