lkml.org 
[lkml]   [2018]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.15 074/122] netlink: put module reference if dump start fails
    Date
    4.15-stable review patch.  If anyone has any objections, please let me know.

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

    From: "Jason A. Donenfeld" <Jason@zx2c4.com>


    [ Upstream commit b87b6194be631c94785fe93398651e804ed43e28 ]

    Before, if cb->start() failed, the module reference would never be put,
    because cb->cb_running is intentionally false at this point. Users are
    generally annoyed by this because they can no longer unload modules that
    leak references. Also, it may be possible to tediously wrap a reference
    counter back to zero, especially since module.c still uses atomic_inc
    instead of refcount_inc.

    This patch expands the error path to simply call module_put if
    cb->start() fails.

    Fixes: 41c87425a1ac ("netlink: do not set cb_running if dump's start() errs")
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    net/netlink/af_netlink.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/net/netlink/af_netlink.c
    +++ b/net/netlink/af_netlink.c
    @@ -2275,7 +2275,7 @@ int __netlink_dump_start(struct sock *ss
    if (cb->start) {
    ret = cb->start(cb);
    if (ret)
    - goto error_unlock;
    + goto error_put;
    }

    nlk->cb_running = true;
    @@ -2295,6 +2295,8 @@ int __netlink_dump_start(struct sock *ss
    */
    return -EINTR;

    +error_put:
    + module_put(control->module);
    error_unlock:
    sock_put(sk);
    mutex_unlock(nlk->cb_mutex);

    \
     
     \ /
      Last update: 2018-03-07 21:21    [W:2.938 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site