2017-07-14 14:41:51

by Ismail, Mustafa

[permalink] [raw]
Subject: [PATCH v2 0/2] Fix modify_qp failure

Commit 5ecce4c9b17b("Check port number supplied by user verbs cmds") causes
modify_qp to fail because port_num is only valid when the mask is set.

Additionally, for iWARP, the port_num is not initialized which also
causes modify_qp to fail.

This series fixes both issues.

Changes to V2:
* Add reviewed-by
* Cc: <[email protected]>

Mustafa Ismail (2):
RDMA/uverbs: Fix the check for port number
RDMA/core: Initialize port_num in qp_attr

drivers/infiniband/core/cma.c | 2 ++
drivers/infiniband/core/uverbs_cmd.c | 3 ++-
2 files changed, 4 insertions(+), 1 deletion(-)

--
2.7.4


2017-07-14 14:42:18

by Ismail, Mustafa

[permalink] [raw]
Subject: [PATCH v2 1/2] RDMA/uverbs: Fix the check for port number

The port number is only valid if IB_QP_PORT is set in the mask.
So only check port number if it is valid to prevent modify_qp from
failing due to an invalid port number.

Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
Cc: <[email protected]> # v2.6.14+
Reviewed-by: Steve Wise <[email protected]>
Signed-off-by: Mustafa Ismail <[email protected]>
---
drivers/infiniband/core/uverbs_cmd.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index 8ba9bfb..19de068 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -1935,7 +1935,8 @@ static int modify_qp(struct ib_uverbs_file *file,
goto out;
}

- if (!rdma_is_port_valid(qp->device, cmd->base.port_num)) {
+ if ((cmd->base.attr_mask & IB_QP_PORT) &&
+ !rdma_is_port_valid(qp->device, cmd->base.port_num)) {
ret = -EINVAL;
goto release_qp;
}
--
2.7.4

2017-07-14 14:41:57

by Ismail, Mustafa

[permalink] [raw]
Subject: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr

Initialize the port_num for iWARP in rdma_init_qp_attr.

Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
Cc: <[email protected]> # v2.6.14+
Reviewed-by: Steve Wise <[email protected]>
Signed-off-by: Mustafa Ismail <[email protected]>
---
drivers/infiniband/core/cma.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
index 31bb82d..d65a093 100644
--- a/drivers/infiniband/core/cma.c
+++ b/drivers/infiniband/core/cma.c
@@ -1044,6 +1044,8 @@ int rdma_init_qp_attr(struct rdma_cm_id *id, struct ib_qp_attr *qp_attr,
} else
ret = iw_cm_init_qp_attr(id_priv->cm_id.iw, qp_attr,
qp_attr_mask);
+ qp_attr->port_num = id_priv->id.port_num;
+ *qp_attr_mask |= IB_QP_PORT;
} else
ret = -ENOSYS;

--
2.7.4

2017-07-17 19:10:21

by Marciniszyn, Mike

[permalink] [raw]
Subject: RE: [PATCH v2 1/2] RDMA/uverbs: Fix the check for port number

> Subject: [PATCH v2 1/2] RDMA/uverbs: Fix the check for port number
>
> The port number is only valid if IB_QP_PORT is set in the mask.
> So only check port number if it is valid to prevent modify_qp from
> failing due to an invalid port number.
>
> Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
> Cc: <[email protected]> # v2.6.14+
> Reviewed-by: Steve Wise <[email protected]>
> Signed-off-by: Mustafa Ismail <[email protected]>

Tested-by: Mike Marciniszyn <[email protected]>

2017-07-17 19:11:03

by Marciniszyn, Mike

[permalink] [raw]
Subject: RE: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr

> Subject: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr
>
> Initialize the port_num for iWARP in rdma_init_qp_attr.
>
> Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
> Cc: <[email protected]> # v2.6.14+
> Reviewed-by: Steve Wise <[email protected]>
> Signed-off-by: Mustafa Ismail <[email protected]>

Tested-by: Mike Marciniszyn <[email protected]>

2017-07-19 08:09:55

by Kalderon, Michal

[permalink] [raw]
Subject: RE: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr

> From: [email protected] [mailto:linux-rdma-
> [email protected]] On Behalf Of Marciniszyn, Mike
> > Initialize the port_num for iWARP in rdma_init_qp_attr.
> >
> > Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
> > Cc: <[email protected]> # v2.6.14+
> > Reviewed-by: Steve Wise <[email protected]>
> > Signed-off-by: Mustafa Ismail <[email protected]>
>
Why is the second patch required if you only validate the port_num if the IB_QP_PORT mask is on?
Given the first patch [PATCH v2 1/2] RDMA/uverbs: Fix the check for port number, this one seems
redundant.

Thanks,
Michal

2017-07-19 14:39:10

by Ismail, Mustafa

[permalink] [raw]
Subject: RE: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr

> -----Original Message-----
> From: Kalderon, Michal [mailto:[email protected]]
> Sent: Wednesday, July 19, 2017 3:10 AM
> To: Marciniszyn, Mike <[email protected]>; Ismail, Mustafa
> <[email protected]>; [email protected];
> [email protected]
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; Saleem, Shiraz
> <[email protected]>; Amrani, Ram <[email protected]>
> Subject: RE: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr
>
> > From: [email protected] [mailto:linux-rdma-
> > [email protected]] On Behalf Of Marciniszyn, Mike
> > > Initialize the port_num for iWARP in rdma_init_qp_attr.
> > >
> > > Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
> > > Cc: <[email protected]> # v2.6.14+
> > > Reviewed-by: Steve Wise <[email protected]>
> > > Signed-off-by: Mustafa Ismail <[email protected]>
> >
> Why is the second patch required if you only validate the port_num if the
> IB_QP_PORT mask is on?
> Given the first patch [PATCH v2 1/2] RDMA/uverbs: Fix the check for port
> number, this one seems redundant.
Strictly speaking it is not required, but we felt it safer to always return a valid port number
as is done in the IB case.

Regards,

Mustafa

2017-07-19 15:09:12

by Kalderon, Michal

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] RDMA/core: Initialize port_num in qp_attr

From: Ismail, Mustafa <[email protected]>
Sent: Wednesday, July 19, 2017 5:38 PM

> > > > Fixes: 5ecce4c9b17b("Check port number supplied by user verbs cmds")
> > > > Cc: <[email protected]> # v2.6.14+
> > > > Reviewed-by: Steve Wise <[email protected]>
> > > > Signed-off-by: Mustafa Ismail <[email protected]>
> > >
> > Why is the second patch required if you only validate the port_num if the
> > IB_QP_PORT mask is on?
> > Given the first patch [PATCH v2 1/2] RDMA/uverbs: Fix the check for port
> > number, this one seems redundant.
> Strictly speaking it is not required, but we felt it safer to always return a valid port number
> as is done in the IB case.

It's not always initialized in the IB case either. More than that if at this point you'll
initialize it for ib as well you'll get a failure on ib_modify_qp_is_ok, since when
transitioning to RTR / RTS providing IB_QP_PORT is not a valid option.
We actually hit this issue when running rping over RoCE. (prior to your fix i mean )
I agree that in general there's no real harm, but it seems a bit out of context, and if we
make the change common for ib/iwarp we'll have to modify ib_modify_qp_is_ok which
is written close to the spec.

thanks,
Michal

2017-07-22 18:18:18

by Doug Ledford

[permalink] [raw]
Subject: Re: [PATCH v2 0/2] Fix modify_qp failure

On 7/14/2017 10:41 AM, Mustafa Ismail wrote:
> Commit 5ecce4c9b17b("Check port number supplied by user verbs cmds") causes
> modify_qp to fail because port_num is only valid when the mask is set.
>
> Additionally, for iWARP, the port_num is not initialized which also
> causes modify_qp to fail.
>
> This series fixes both issues.
>
> Changes to V2:
> * Add reviewed-by
> * Cc: <[email protected]>
>
> Mustafa Ismail (2):
> RDMA/uverbs: Fix the check for port number
> RDMA/core: Initialize port_num in qp_attr
>
> drivers/infiniband/core/cma.c | 2 ++
> drivers/infiniband/core/uverbs_cmd.c | 3 ++-
> 2 files changed, 4 insertions(+), 1 deletion(-)
>

This was accepted into 4.13-rc, thanks.

--
Doug Ledford <[email protected]>
GPG Key ID: B826A3330E572FDD
Key fingerprint = AE6B 1BDA 122B 23B4 265B 1274 B826 A333 0E57 2FDD


Attachments:
signature.asc (884.00 B)
OpenPGP digital signature