IB/mlx5: Fix memory leak in mlx5_ib_create_flow
In case memory resources for *ucmd* were allocated, release them
before return.
Addresses-Coverity-ID: 1469857 ("Resource leak")
Fixes: 3b3233fbf0
("IB/mlx5: Add flow counters binding support")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
828d810550
commit
299eafee39
@ -3546,29 +3546,35 @@ static struct ib_flow *mlx5_ib_create_flow(struct ib_qp *qp,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
err = ib_copy_from_udata(ucmd, udata, required_ucmd_sz);
|
||||
if (err) {
|
||||
kfree(ucmd);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
if (err)
|
||||
goto free_ucmd;
|
||||
}
|
||||
|
||||
if (flow_attr->priority > MLX5_IB_FLOW_LAST_PRIO)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
if (flow_attr->priority > MLX5_IB_FLOW_LAST_PRIO) {
|
||||
err = -ENOMEM;
|
||||
goto free_ucmd;
|
||||
}
|
||||
|
||||
if (domain != IB_FLOW_DOMAIN_USER ||
|
||||
flow_attr->port > dev->num_ports ||
|
||||
(flow_attr->flags & ~(IB_FLOW_ATTR_FLAGS_DONT_TRAP |
|
||||
IB_FLOW_ATTR_FLAGS_EGRESS)))
|
||||
return ERR_PTR(-EINVAL);
|
||||
IB_FLOW_ATTR_FLAGS_EGRESS))) {
|
||||
err = -EINVAL;
|
||||
goto free_ucmd;
|
||||
}
|
||||
|
||||
if (is_egress &&
|
||||
(flow_attr->type == IB_FLOW_ATTR_ALL_DEFAULT ||
|
||||
flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT))
|
||||
return ERR_PTR(-EINVAL);
|
||||
flow_attr->type == IB_FLOW_ATTR_MC_DEFAULT)) {
|
||||
err = -EINVAL;
|
||||
goto free_ucmd;
|
||||
}
|
||||
|
||||
dst = kzalloc(sizeof(*dst), GFP_KERNEL);
|
||||
if (!dst)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
if (!dst) {
|
||||
err = -ENOMEM;
|
||||
goto free_ucmd;
|
||||
}
|
||||
|
||||
mutex_lock(&dev->flow_db->lock);
|
||||
|
||||
@ -3637,8 +3643,8 @@ destroy_ft:
|
||||
unlock:
|
||||
mutex_unlock(&dev->flow_db->lock);
|
||||
kfree(dst);
|
||||
free_ucmd:
|
||||
kfree(ucmd);
|
||||
kfree(handler);
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user