lkml.org 
[lkml]   [2018]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.18 130/131] RDMA/cma: Do not ignore net namespace for unbound cm_id
    Date
    From: Parav Pandit <parav@mellanox.com>

    [ Upstream commit 643d213a9a034fa04f5575a40dfc8548e33ce04f ]

    Currently if the cm_id is not bound to any netdevice, than for such cm_id,
    net namespace is ignored; which is incorrect.

    Regardless of cm_id bound to a netdevice or not, net namespace must
    match. When a cm_id is bound to a netdevice, in such case net namespace
    and netdevice both must match.

    Fixes: 4c21b5bcef73 ("IB/cma: Add net_dev and private data checks to RDMA CM")
    Signed-off-by: Parav Pandit <parav@mellanox.com>
    Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/infiniband/core/cma.c | 13 ++++++++++---
    1 file changed, 10 insertions(+), 3 deletions(-)

    diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c
    index bff10ab141b0..dafcb6f019b3 100644
    --- a/drivers/infiniband/core/cma.c
    +++ b/drivers/infiniband/core/cma.c
    @@ -1445,9 +1445,16 @@ static bool cma_match_net_dev(const struct rdma_cm_id *id,
    (addr->src_addr.ss_family == AF_IB ||
    rdma_protocol_roce(id->device, port_num));

    - return !addr->dev_addr.bound_dev_if ||
    - (net_eq(dev_net(net_dev), addr->dev_addr.net) &&
    - addr->dev_addr.bound_dev_if == net_dev->ifindex);
    + /*
    + * Net namespaces must match, and if the listner is listening
    + * on a specific netdevice than netdevice must match as well.
    + */
    + if (net_eq(dev_net(net_dev), addr->dev_addr.net) &&
    + (!!addr->dev_addr.bound_dev_if ==
    + (addr->dev_addr.bound_dev_if == net_dev->ifindex)))
    + return true;
    + else
    + return false;
    }

    static struct rdma_id_private *cma_find_listener(
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-09-02 15:28    [W:4.185 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site