From: "Bryan O'Sullivan" Signed-off-by: Robert Walsh Signed-off-by: Bryan O'Sullivan Cc: "Michael S. Tsirkin" Cc: Roland Dreier Signed-off-by: Andrew Morton --- drivers/infiniband/hw/ipath/ipath_mr.c | 5 +++++ drivers/infiniband/hw/ipath/ipath_qp.c | 8 ++++++++ drivers/infiniband/hw/ipath/ipath_verbs.c | 11 +++++++++++ 3 files changed, 24 insertions(+) diff -puN drivers/infiniband/hw/ipath/ipath_mr.c~ib-ipath-dont-allow-resources-to-be-created-with drivers/infiniband/hw/ipath/ipath_mr.c --- a/drivers/infiniband/hw/ipath/ipath_mr.c~ib-ipath-dont-allow-resources-to-be-created-with +++ a/drivers/infiniband/hw/ipath/ipath_mr.c @@ -170,6 +170,11 @@ struct ib_mr *ipath_reg_user_mr(struct i int n, m, i; struct ib_mr *ret; + if (region->length == 0) { + ret = ERR_PTR(-EINVAL); + goto bail; + } + n = 0; list_for_each_entry(chunk, ®ion->chunk_list, list) n += chunk->nents; diff -puN drivers/infiniband/hw/ipath/ipath_qp.c~ib-ipath-dont-allow-resources-to-be-created-with drivers/infiniband/hw/ipath/ipath_qp.c --- a/drivers/infiniband/hw/ipath/ipath_qp.c~ib-ipath-dont-allow-resources-to-be-created-with +++ a/drivers/infiniband/hw/ipath/ipath_qp.c @@ -667,6 +667,14 @@ struct ib_qp *ipath_create_qp(struct ib_ goto bail; } + if (init_attr->cap.max_send_sge + + init_attr->cap.max_recv_sge + + init_attr->cap.max_send_wr + + init_attr->cap.max_recv_wr == 0) { + ret = ERR_PTR(-EINVAL); + goto bail; + } + switch (init_attr->qp_type) { case IB_QPT_UC: case IB_QPT_RC: diff -puN drivers/infiniband/hw/ipath/ipath_verbs.c~ib-ipath-dont-allow-resources-to-be-created-with drivers/infiniband/hw/ipath/ipath_verbs.c --- a/drivers/infiniband/hw/ipath/ipath_verbs.c~ib-ipath-dont-allow-resources-to-be-created-with +++ a/drivers/infiniband/hw/ipath/ipath_verbs.c @@ -792,6 +792,17 @@ static struct ib_ah *ipath_create_ah(str goto bail; } + if (ah_attr->dlid == 0) { + ret = ERR_PTR(-EINVAL); + goto bail; + } + + if (ah_attr->port_num != 1 || + ah_attr->port_num > pd->device->phys_port_cnt) { + ret = ERR_PTR(-EINVAL); + goto bail; + } + ah = kmalloc(sizeof *ah, GFP_ATOMIC); if (!ah) { ret = ERR_PTR(-ENOMEM); _