--- x/drivers/infiniband/sw/rxe/rxe_net.c +++ y/drivers/infiniband/sw/rxe/rxe_net.c @@ -471,6 +471,7 @@ struct sk_buff *rxe_init_packet(struct r struct net_device *ndev; const struct ib_gid_attr *attr; const int port_num = 1; + struct rxe_dev *rdev; attr = rdma_get_gid_attr(&rxe->ib_dev, port_num, av->grh.sgid_index); if (IS_ERR(attr)) @@ -503,6 +504,17 @@ struct sk_buff *rxe_init_packet(struct r skb->dev = ndev; rcu_read_unlock(); + rdev = rxe_get_dev_from_net(ndev); + if (!rdev && is_vlan_dev(ndev)) + rdev = rxe_get_dev_from_net(vlan_dev_real_dev(ndev)); + if (rdev) + ib_device_put(&rdev->ib_dev); + if (rdev != rxe) { + kfree_skb(skb); + skb = NULL; + goto out; + } + if (av->network_type == RXE_NETWORK_TYPE_IPV4) skb->protocol = htons(ETH_P_IP); else