]> git.baikalelectronics.ru Git - kernel.git/commit
IB/core: Avoid accessing non-allocated memory when inferring port type
authorNoa Osherovich <noaos@mellanox.com>
Wed, 23 Aug 2017 05:35:40 +0000 (08:35 +0300)
committerDoug Ledford <dledford@redhat.com>
Thu, 24 Aug 2017 19:33:33 +0000 (15:33 -0400)
commit191a229501c099043683716d3a531d749170882c
tree095d8d2ce4f7c6aeeaa3d6c5bab735ba1c4d205d
parent2d1361f74e53035d8da0c5ec33a33dab77a459d8
IB/core: Avoid accessing non-allocated memory when inferring port type

Commit fdc0d584db03 ("IB/core: Define 'ib' and 'roce' rdma_ah_attr types")
introduced the concept of type in ah_attr:
 * During ib_register_device, each port is checked for its type which
   is stored in ib_device's port_immutable array.
 * During uverbs' modify_qp, the type is inferred using the port number
   in ib_uverbs_qp_dest struct (address vector) by accessing the
   relevant port_immutable array and the type is passed on to
   providers.

IB spec (version 1.3) enforces a valid port value only in Reset to
Init. During Init to RTR, the address vector must be valid but port
number is not mentioned as a field in the address vector, so its
value is not validated, which leads to accesses to a non-allocated
memory when inferring the port type.

Save the real port number in ib_qp during modify to Init (when the
comp_mask indicates that the port number is valid) and use this value
to infer the port type.

Avoid copying the address vector fields if the matching bit is not set
in the attr_mask. Address vector can't be modified before the port, so
no valid flow is affected.

Fixes: fdc0d584db03 ('IB/core: Define 'ib' and 'roce' rdma_ah_attr types')
Signed-off-by: Noa Osherovich <noaos@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/verbs.c
include/rdma/ib_verbs.h