aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/infiniband/core/ucma.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/infiniband/core/ucma.c b/drivers/infiniband/core/ucma.c
index 699a46d4c0c5..3f3f7bbc4528 100644
--- a/drivers/infiniband/core/ucma.c
+++ b/drivers/infiniband/core/ucma.c
@@ -664,19 +664,23 @@ static ssize_t ucma_resolve_ip(struct ucma_file *file,
664 int in_len, int out_len) 664 int in_len, int out_len)
665{ 665{
666 struct rdma_ucm_resolve_ip cmd; 666 struct rdma_ucm_resolve_ip cmd;
667 struct sockaddr *src, *dst;
667 struct ucma_context *ctx; 668 struct ucma_context *ctx;
668 int ret; 669 int ret;
669 670
670 if (copy_from_user(&cmd, inbuf, sizeof(cmd))) 671 if (copy_from_user(&cmd, inbuf, sizeof(cmd)))
671 return -EFAULT; 672 return -EFAULT;
672 673
674 src = (struct sockaddr *) &cmd.src_addr;
675 dst = (struct sockaddr *) &cmd.dst_addr;
676 if (!rdma_addr_size(src) || !rdma_addr_size(dst))
677 return -EINVAL;
678
673 ctx = ucma_get_ctx(file, cmd.id); 679 ctx = ucma_get_ctx(file, cmd.id);
674 if (IS_ERR(ctx)) 680 if (IS_ERR(ctx))
675 return PTR_ERR(ctx); 681 return PTR_ERR(ctx);
676 682
677 ret = rdma_resolve_addr(ctx->cm_id, (struct sockaddr *) &cmd.src_addr, 683 ret = rdma_resolve_addr(ctx->cm_id, src, dst, cmd.timeout_ms);
678 (struct sockaddr *) &cmd.dst_addr,
679 cmd.timeout_ms);
680 ucma_put_ctx(ctx); 684 ucma_put_ctx(ctx);
681 return ret; 685 return ret;
682} 686}