On Sun, Jun 24, 2018 at 11:23:42AM +0300, Leon Romanovsky wrote: > From: Leon Romanovsky <leonro@xxxxxxxxxxxx> > > Flows can be created on UD and RAW_PACKET QP types. Attempts to provide > other QP types as an input causes to various unpredictable failures. > > The reason to it that in order to support all various types (e.g. XRC), > we are supposed to use real_qp handle and not qp handle and give to > driver/FW to fail such (XRC) flows. Being valuable solution, the simpler > and safer variant is to ban all QP types except UD and RAW_PACKET, > instead of relying on driver/FW. > > Cc: <stable@xxxxxxxxxxxxxxx> # 3.11 > Fixes: 436f2ad05a0b ("IB/core: Export ib_create/destroy_flow through uverbs") > Cc: syzkaller <syzkaller@xxxxxxxxxxxxxxxx> > Reported-by: Noa Osherovich <noaos@xxxxxxxxxxxx> > Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxxxx> > --- > drivers/infiniband/core/uverbs_cmd.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c > index 779892b63729..c842a9423fbf 100644 > --- a/drivers/infiniband/core/uverbs_cmd.c > +++ b/drivers/infiniband/core/uverbs_cmd.c > @@ -3553,14 +3553,20 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file, > goto err_free_attr; > } > > - qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, file->ucontext); > + qp = uobj_get_obj_read(qp, UVERBS_OBJECT_QP, cmd.qp_handle, > + file->ucontext); This hunk is just whitespace changing > if (!qp) { > err = -EINVAL; > goto err_uobj; > } > > + if (qp->qp_type != IB_QPT_UD && qp->qp_type != IB_QPT_RAW_PACKET) { > + err = -EINVAL; > + goto err_put; > + } > + > flow_attr = kzalloc(struct_size(flow_attr, flows, > - cmd.flow_attr.num_of_specs), GFP_KERNEL); > + cmd.flow_attr.num_of_specs), GFP_KERNEL); Same here. I dropped the two hunks and applied this to for-rc since it has stable tags. Jason -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html