lkml.org 
[lkml]   [2017]   [Sep]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 194/233] IB/ipoib: Fix memory leak in create child syscall
    3.16.48-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Feras Daoud <ferasda@mellanox.com>

    commit 4542d66bb26f2d021c70a78e46f183c6675fc4c9 upstream.

    The flow of creating a new child goes through ipoib_vlan_add
    which allocates a new interface and checks the rtnl_lock.

    If the lock is taken, restart_syscall will be called to restart
    the system call again. In this case we are not releasing the
    already allocated interface, causing a leak.

    Fixes: 9baa0b036410 ("IB/ipoib: Add rtnl_link_ops support")
    Signed-off-by: Feras Daoud <ferasda@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    --- a/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
    +++ b/drivers/infiniband/ulp/ipoib/ipoib_vlan.c
    @@ -133,13 +133,14 @@ int ipoib_vlan_add(struct net_device *pd

    snprintf(intf_name, sizeof intf_name, "%s.%04x",
    ppriv->dev->name, pkey);
    - priv = ipoib_intf_alloc(intf_name);
    - if (!priv)
    - return -ENOMEM;

    if (!rtnl_trylock())
    return restart_syscall();

    + priv = ipoib_intf_alloc(intf_name);
    + if (!priv)
    + return -ENOMEM;
    +
    down_write(&ppriv->vlan_rwsem);

    /*
    \
     
     \ /
      Last update: 2017-09-10 01:17    [W:4.822 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site