提交 dee49f20 编写于 作者: C Cong Wang 提交者: David S. Miller

rds: avoid calling sock_kfree_s() on allocation failure

It is okay to free a NULL pointer but not okay to mischarge the socket optmem
accounting. Compile test only.

Reported-by: rucsoftsec@gmail.com
Cc: Chien Yen <chien.yen@oracle.com>
Cc: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: NCong Wang <cwang@twopensource.com>
Signed-off-by: NCong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 22c0b963
...@@ -564,12 +564,12 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, ...@@ -564,12 +564,12 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
if (rs->rs_bound_addr == 0) { if (rs->rs_bound_addr == 0) {
ret = -ENOTCONN; /* XXX not a great errno */ ret = -ENOTCONN; /* XXX not a great errno */
goto out; goto out_ret;
} }
if (args->nr_local > UIO_MAXIOV) { if (args->nr_local > UIO_MAXIOV) {
ret = -EMSGSIZE; ret = -EMSGSIZE;
goto out; goto out_ret;
} }
/* Check whether to allocate the iovec area */ /* Check whether to allocate the iovec area */
...@@ -578,7 +578,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, ...@@ -578,7 +578,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
iovs = sock_kmalloc(rds_rs_to_sk(rs), iov_size, GFP_KERNEL); iovs = sock_kmalloc(rds_rs_to_sk(rs), iov_size, GFP_KERNEL);
if (!iovs) { if (!iovs) {
ret = -ENOMEM; ret = -ENOMEM;
goto out; goto out_ret;
} }
} }
...@@ -696,6 +696,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm, ...@@ -696,6 +696,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
if (iovs != iovstack) if (iovs != iovstack)
sock_kfree_s(rds_rs_to_sk(rs), iovs, iov_size); sock_kfree_s(rds_rs_to_sk(rs), iovs, iov_size);
kfree(pages); kfree(pages);
out_ret:
if (ret) if (ret)
rds_rdma_free_op(op); rds_rdma_free_op(op);
else else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册