IB/mlx5: Fix use of null pointer PD
When a Raw Ethernet QP is created, a NULL pointer PD could be used.
Fixing that by only using the PD after validating it's valid.
smatch also reported this error:
drivers/infiniband/hw/mlx5/qp.c:1629 mlx5_ib_create_qp()
error: we previously assumed 'pd' could be null (see line 1616)
Fixes: 0fb2ed66a1
('IB/mlx5: Add create and destroy functionality for Raw Packet QP')
Signed-off-by: Majd Dibbiny <majd@mellanox.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
a168a41c81
commit
09f16cf59f
|
@ -1615,15 +1615,6 @@ struct ib_qp *mlx5_ib_create_qp(struct ib_pd *pd,
|
|||
|
||||
if (pd) {
|
||||
dev = to_mdev(pd->device);
|
||||
} else {
|
||||
/* being cautious here */
|
||||
if (init_attr->qp_type != IB_QPT_XRC_TGT &&
|
||||
init_attr->qp_type != MLX5_IB_QPT_REG_UMR) {
|
||||
pr_warn("%s: no PD for transport %s\n", __func__,
|
||||
ib_qp_type_str(init_attr->qp_type));
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
dev = to_mdev(to_mxrcd(init_attr->xrcd)->ibxrcd.device);
|
||||
|
||||
if (init_attr->qp_type == IB_QPT_RAW_PACKET) {
|
||||
if (!pd->uobject) {
|
||||
|
@ -1634,6 +1625,15 @@ struct ib_qp *mlx5_ib_create_qp(struct ib_pd *pd,
|
|||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* being cautious here */
|
||||
if (init_attr->qp_type != IB_QPT_XRC_TGT &&
|
||||
init_attr->qp_type != MLX5_IB_QPT_REG_UMR) {
|
||||
pr_warn("%s: no PD for transport %s\n", __func__,
|
||||
ib_qp_type_str(init_attr->qp_type));
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
dev = to_mdev(to_mxrcd(init_attr->xrcd)->ibxrcd.device);
|
||||
}
|
||||
|
||||
switch (init_attr->qp_type) {
|
||||
|
|
Loading…
Reference in New Issue