diff options
| author | Florin Malita <fmalita@gmail.com> | 2007-07-19 15:58:09 -0400 |
|---|---|---|
| committer | Roland Dreier <rolandd@cisco.com> | 2007-07-21 00:19:43 -0400 |
| commit | f5b404317b79823ec643dfbb71d62f65a48cc178 (patch) | |
| tree | 9957a904999d4bea903653499af02affa1d8b609 | |
| parent | c2e68052429fdf87702fccd272951282bef1c60a (diff) | |
IB/mlx4: Fix leaks in __mlx4_ib_modify_qp
Temporarily allocated struct mlx4_qp_context *context is leaked by
several error paths. The patch takes advantage of the return value
'err' being preinitialized to -EINVAL.
Spotted by Coverity (CID 1768).
Signed-off-by: Florin Malita <fmalita@gmail.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
| -rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index b5a24fbef70d..5456bc4aff7c 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -742,7 +742,7 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp, | |||
| 742 | if (attr->path_mtu < IB_MTU_256 || attr->path_mtu > IB_MTU_4096) { | 742 | if (attr->path_mtu < IB_MTU_256 || attr->path_mtu > IB_MTU_4096) { |
| 743 | printk(KERN_ERR "path MTU (%u) is invalid\n", | 743 | printk(KERN_ERR "path MTU (%u) is invalid\n", |
| 744 | attr->path_mtu); | 744 | attr->path_mtu); |
| 745 | return -EINVAL; | 745 | goto out; |
| 746 | } | 746 | } |
| 747 | context->mtu_msgmax = (attr->path_mtu << 5) | 31; | 747 | context->mtu_msgmax = (attr->path_mtu << 5) | 31; |
| 748 | } | 748 | } |
| @@ -781,10 +781,8 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp, | |||
| 781 | 781 | ||
| 782 | if (attr_mask & IB_QP_AV) { | 782 | if (attr_mask & IB_QP_AV) { |
| 783 | if (mlx4_set_path(dev, &attr->ah_attr, &context->pri_path, | 783 | if (mlx4_set_path(dev, &attr->ah_attr, &context->pri_path, |
| 784 | attr_mask & IB_QP_PORT ? attr->port_num : qp->port)) { | 784 | attr_mask & IB_QP_PORT ? attr->port_num : qp->port)) |
| 785 | err = -EINVAL; | ||
| 786 | goto out; | 785 | goto out; |
| 787 | } | ||
| 788 | 786 | ||
| 789 | optpar |= (MLX4_QP_OPTPAR_PRIMARY_ADDR_PATH | | 787 | optpar |= (MLX4_QP_OPTPAR_PRIMARY_ADDR_PATH | |
| 790 | MLX4_QP_OPTPAR_SCHED_QUEUE); | 788 | MLX4_QP_OPTPAR_SCHED_QUEUE); |
| @@ -798,15 +796,15 @@ static int __mlx4_ib_modify_qp(struct ib_qp *ibqp, | |||
| 798 | if (attr_mask & IB_QP_ALT_PATH) { | 796 | if (attr_mask & IB_QP_ALT_PATH) { |
| 799 | if (attr->alt_port_num == 0 || | 797 | if (attr->alt_port_num == 0 || |
| 800 | attr->alt_port_num > dev->dev->caps.num_ports) | 798 | attr->alt_port_num > dev->dev->caps.num_ports) |
| 801 | return -EINVAL; | 799 | goto out; |
| 802 | 800 | ||
| 803 | if (attr->alt_pkey_index >= | 801 | if (attr->alt_pkey_index >= |
| 804 | dev->dev->caps.pkey_table_len[attr->alt_port_num]) | 802 | dev->dev->caps.pkey_table_len[attr->alt_port_num]) |
| 805 | return -EINVAL; | 803 | goto out; |
| 806 | 804 | ||
| 807 | if (mlx4_set_path(dev, &attr->alt_ah_attr, &context->alt_path, | 805 | if (mlx4_set_path(dev, &attr->alt_ah_attr, &context->alt_path, |
| 808 | attr->alt_port_num)) | 806 | attr->alt_port_num)) |
| 809 | return -EINVAL; | 807 | goto out; |
| 810 | 808 | ||
| 811 | context->alt_path.pkey_index = attr->alt_pkey_index; | 809 | context->alt_path.pkey_index = attr->alt_pkey_index; |
| 812 | context->alt_path.ackto = attr->alt_timeout << 3; | 810 | context->alt_path.ackto = attr->alt_timeout << 3; |
