RDMA/ocrdma: Don't allow zero/invalid sgid usage
Signed-off-by: Naresh Gottumukkala <bgottumukkala@emulex.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
Родитель
1afc0454b6
Коммит
9c58726ba9
|
@ -2124,9 +2124,10 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
struct ib_ah_attr *ah_attr = &attrs->ah_attr;
|
struct ib_ah_attr *ah_attr = &attrs->ah_attr;
|
||||||
union ib_gid sgid;
|
union ib_gid sgid, zgid;
|
||||||
u32 vlan_id;
|
u32 vlan_id;
|
||||||
u8 mac_addr[6];
|
u8 mac_addr[6];
|
||||||
|
|
||||||
if ((ah_attr->ah_flags & IB_AH_GRH) == 0)
|
if ((ah_attr->ah_flags & IB_AH_GRH) == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
cmd->params.tclass_sq_psn |=
|
cmd->params.tclass_sq_psn |=
|
||||||
|
@ -2142,6 +2143,11 @@ static int ocrdma_set_av_params(struct ocrdma_qp *qp,
|
||||||
ah_attr->grh.sgid_index, &sgid);
|
ah_attr->grh.sgid_index, &sgid);
|
||||||
if (status)
|
if (status)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
memset(&zgid, 0, sizeof(zgid));
|
||||||
|
if (!memcmp(&sgid, &zgid, sizeof(zgid)))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
qp->sgid_idx = ah_attr->grh.sgid_index;
|
qp->sgid_idx = ah_attr->grh.sgid_index;
|
||||||
memcpy(&cmd->params.sgid[0], &sgid.raw[0], sizeof(cmd->params.sgid));
|
memcpy(&cmd->params.sgid[0], &sgid.raw[0], sizeof(cmd->params.sgid));
|
||||||
ocrdma_resolve_dgid(qp->dev, &ah_attr->grh.dgid, &mac_addr[0]);
|
ocrdma_resolve_dgid(qp->dev, &ah_attr->grh.dgid, &mac_addr[0]);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче