]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
RDMA/core: Resolve MAC of next-hop device without ARP support
authorParav Pandit <parav@nvidia.com>
Tue, 16 Sep 2025 11:11:01 +0000 (14:11 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Oct 2025 09:56:35 +0000 (11:56 +0200)
[ Upstream commit 200651b9b8aadfbbec852f0e5d042d9abe75e2ab ]

Currently, if the next-hop netdevice does not support ARP resolution,
the destination MAC address is silently set to zero without reporting
an error. This leads to incorrect behavior and may result in packet
transmission failures.

Fix this by deferring MAC resolution to the IP stack via neighbour
lookup, allowing proper resolution or error reporting as appropriate.

Fixes: 7025fcd36bd6 ("IB: address translation to map IP toIB addresses (GIDs)")
Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Vlad Dumitrescu <vdumitrescu@nvidia.com>
Signed-off-by: Edward Srouji <edwards@nvidia.com>
Link: https://patch.msgid.link/20250916111103.84069-3-edwards@nvidia.com
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/infiniband/core/addr.c

index f253295795f0a41c8fc78892051b09aa5df9cc66..cdb3b99e057cfaf286de1389db8edea4d03be7e7 100644 (file)
@@ -460,14 +460,10 @@ static int addr_resolve_neigh(const struct dst_entry *dst,
 {
        int ret = 0;
 
-       if (ndev_flags & IFF_LOOPBACK) {
+       if (ndev_flags & IFF_LOOPBACK)
                memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN);
-       } else {
-               if (!(ndev_flags & IFF_NOARP)) {
-                       /* If the device doesn't do ARP internally */
-                       ret = fetch_ha(dst, addr, dst_in, seq);
-               }
-       }
+       else
+               ret = fetch_ha(dst, addr, dst_in, seq);
        return ret;
 }