RDMA/irdma: Fix VLAN connection with wildcard address
[ Upstream commit 82ab2b52654c43ba24a3f6603fec40874cc5a7e5 ] When an application listens on a wildcard address, and there are VLAN and non-VLAN IP addresses, iWARP connection establishemnt can fail if the listen node VLAN ID does not match. Fix this by checking the vlan_id only if not a wildcard listen node. Fixes: 146b9756f14c ("RDMA/irdma: Add connection manager") Link: https://lore.kernel.org/r/20220705230815.265-7-shiraz.saleem@intel.com Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
350ac793a0
commit
f420fa0def
@ -1477,12 +1477,13 @@ irdma_find_listener(struct irdma_cm_core *cm_core, u32 *dst_addr, u16 dst_port,
|
||||
list_for_each_entry (listen_node, &cm_core->listen_list, list) {
|
||||
memcpy(listen_addr, listen_node->loc_addr, sizeof(listen_addr));
|
||||
listen_port = listen_node->loc_port;
|
||||
if (listen_port != dst_port ||
|
||||
!(listener_state & listen_node->listener_state))
|
||||
continue;
|
||||
/* compare node pair, return node handle if a match */
|
||||
if ((!memcmp(listen_addr, dst_addr, sizeof(listen_addr)) ||
|
||||
!memcmp(listen_addr, ip_zero, sizeof(listen_addr))) &&
|
||||
listen_port == dst_port &&
|
||||
vlan_id == listen_node->vlan_id &&
|
||||
(listener_state & listen_node->listener_state)) {
|
||||
if (!memcmp(listen_addr, ip_zero, sizeof(listen_addr)) ||
|
||||
(!memcmp(listen_addr, dst_addr, sizeof(listen_addr)) &&
|
||||
vlan_id == listen_node->vlan_id)) {
|
||||
refcount_inc(&listen_node->refcnt);
|
||||
spin_unlock_irqrestore(&cm_core->listen_list_lock,
|
||||
flags);
|
||||
|
Loading…
x
Reference in New Issue
Block a user