----- Original Message ----- > From: "Bart Van Assche" <bart.vanassche@xxxxxxxxxxx> > To: "Doug Ledford" <dledford@xxxxxxxxxx> > Cc: "Max Gurtovoy" <maxg@xxxxxxxxxxxx>, "Sagi Grimberg" <sagi@xxxxxxxxxxx>, "Leon Romanovsky" <leonro@xxxxxxxxxxxx>, > "Israel Rukshin" <israelr@xxxxxxxxxxxx>, "Laurence Oberman" <loberman@xxxxxxxxxx>, linux-rdma@xxxxxxxxxxxxxxx > Sent: Monday, April 24, 2017 6:15:28 PM > Subject: [PATCH, untested] mlx5: Avoid that mlx5_ib_sg_to_klms() overflows the klms[] array > > ib_map_mr_sg() can pass an SG-list to .map_mr_sg() that is larger > than what fits into a single MR. .map_mr_sg() must not attempt to > map more SG-list elements than what fits into a single MR. > Hence make sure that mlx5_ib_sg_to_klms() does not write outside > the MR klms[] array. > > Fixes: b005d3164713 ("mlx5: Add arbitrary sg list support") > Signed-off-by: Bart Van Assche <bart.vanassche@xxxxxxxxxxx> > Reviewed-by: Max Gurtovoy <maxg@xxxxxxxxxxxx> > Cc: Sagi Grimberg <sagi@xxxxxxxxxxx> > Cc: Leon Romanovsky <leonro@xxxxxxxxxxxx> > Cc: Israel Rukshin <israelr@xxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > --- > drivers/infiniband/hw/mlx5/mr.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/infiniband/hw/mlx5/mr.c > b/drivers/infiniband/hw/mlx5/mr.c > index d9c6c0ea750b..99beacfc4716 100644 > --- a/drivers/infiniband/hw/mlx5/mr.c > +++ b/drivers/infiniband/hw/mlx5/mr.c > @@ -1777,7 +1777,7 @@ mlx5_ib_sg_to_klms(struct mlx5_ib_mr *mr, > mr->ndescs = sg_nents; > > for_each_sg(sgl, sg, sg_nents, i) { > - if (unlikely(i > mr->max_descs)) > + if (unlikely(i >= mr->max_descs)) > break; > klms[i].va = cpu_to_be64(sg_dma_address(sg) + sg_offset); > klms[i].bcount = cpu_to_be32(sg_dma_len(sg) - sg_offset); > -- > 2.12.2 > > Thanks Bart as always. Will get this tested this week, Regards Laurence -- 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