lkml.org 
[lkml]   [2014]   [Apr]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 28/72] tipc: fix connection refcount leak
    Date
    From: Ying Xue <ying.xue@windriver.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    [ Upstream commit 4652edb70e8a7eebbe47fa931940f65522c36e8f ]

    When tipc_conn_sendmsg() calls tipc_conn_lookup() to query a
    connection instance, its reference count value is increased if
    it's found. But subsequently if it's found that the connection is
    closed, the work of sending message is not queued into its server
    send workqueue, and the connection reference count is not decreased.
    This will cause a reference count leak. To reproduce this problem,
    an application would need to open and closes topology server
    connections with high intensity.

    We fix this by immediately decrementing the connection reference
    count if a send fails due to the connection being closed.

    Signed-off-by: Ying Xue <ying.xue@windriver.com>
    Acked-by: Erik Hugne <erik.hugne@ericsson.com>
    Reviewed-by: Jon Maloy <jon.maloy@ericsson.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    net/tipc/server.c | 6 ++++--
    1 file changed, 4 insertions(+), 2 deletions(-)

    diff --git a/net/tipc/server.c b/net/tipc/server.c
    index ae474479f12e..bd2336aad0e4 100644
    --- a/net/tipc/server.c
    +++ b/net/tipc/server.c
    @@ -427,10 +427,12 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
    list_add_tail(&e->list, &con->outqueue);
    spin_unlock_bh(&con->outqueue_lock);

    - if (test_bit(CF_CONNECTED, &con->flags))
    + if (test_bit(CF_CONNECTED, &con->flags)) {
    if (!queue_work(s->send_wq, &con->swork))
    conn_put(con);
    -
    + } else {
    + conn_put(con);
    + }
    return 0;
    }

    --
    1.9.2


    \
     
     \ /
      Last update: 2014-04-18 14:01    [W:8.617 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site