Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 255d0c14 authored by Krishna Kumar's avatar Krishna Kumar Committed by Roland Dreier
Browse files

RDMA/cma: rdma_bind_addr() leaks a cma_dev reference count



rdma_bind_addr() leaks a cma_dev reference count in failure case.

Signed-off-by: default avatarKrishna Kumar <krkumar2@in.ibm.com>
Signed-off-by: default avatarSean Hefty <sean.hefty@intel.com>
parent 2e7a7426
Loading
Loading
Loading
Loading
+15 −8
Original line number Diff line number Diff line
@@ -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) {
		if (ret)
			goto err1;

		mutex_lock(&lock);
		ret = cma_acquire_dev(id_priv);
		mutex_unlock(&lock);
		}
		if (ret)
			goto err;
			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;
}