Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 563c4ba3 authored by Parav Pandit's avatar Parav Pandit Committed by Jason Gunthorpe
Browse files

IB/core: Honor port_num while resolving GID for IB link layer



ah_attr contains the port number to which cm_id is bound. However, while
searching for GID table for matching GID entry, the port number is
ignored.

This could cause the wrong GID to be used when the ah_attr is converted to
an AH.

Reviewed-by: default avatarDaniel Jurgens <danielj@mellanox.com>
Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 6d337179
Loading
Loading
Loading
Loading
+12 −14
Original line number Diff line number Diff line
@@ -724,21 +724,19 @@ int ib_init_ah_from_mcmember(struct ib_device *device, u8 port_num,
{
	int ret;
	u16 gid_index;
	u8 p;

	if (rdma_protocol_roce(device, port_num)) {
	/* GID table is not based on the netdevice for IB link layer,
	 * so ignore ndev during search.
	 */
	if (rdma_protocol_ib(device, port_num))
		ndev = NULL;
	else if (!rdma_protocol_roce(device, port_num))
		return -EINVAL;

	ret = ib_find_cached_gid_by_port(device, &rec->port_gid,
					 gid_type, port_num,
					 ndev,
					 &gid_index);
	} else if (rdma_protocol_ib(device, port_num)) {
		ret = ib_find_cached_gid(device, &rec->port_gid,
					 IB_GID_TYPE_IB, NULL, &p,
					 &gid_index);
	} else {
		ret = -EINVAL;
	}

	if (ret)
		return ret;