diff options
author | Sowmini Varadhan <sowmini.varadhan@oracle.com> | 2017-03-04 17:57:33 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-03-07 23:09:59 +0100 |
commit | 8edc3affc0770886c7bfb3436b0fdd09bce13167 (patch) | |
tree | cfe3a2ae7348961f4c8872ffd5158d2ba4e35235 /net/rds/connection.c | |
parent | Merge branch 'sock_hold-misuses' (diff) | |
download | linux-8edc3affc0770886c7bfb3436b0fdd09bce13167.tar.xz linux-8edc3affc0770886c7bfb3436b0fdd09bce13167.zip |
rds: tcp: Take explicit refcounts on struct net
It is incorrect for the rds_connection to piggyback on the
sock_net() refcount for the netns because this gives rise to
a chicken-and-egg problem during rds_conn_destroy. Instead explicitly
take a ref on the net, and hold the netns down till the connection
tear-down is complete.
Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rds/connection.c')
-rw-r--r-- | net/rds/connection.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/rds/connection.c b/net/rds/connection.c index 0e04dcceb1d4..1fa75ab7b733 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -429,6 +429,7 @@ void rds_conn_destroy(struct rds_connection *conn) */ rds_cong_remove_conn(conn); + put_net(conn->c_net); kmem_cache_free(rds_conn_slab, conn); spin_lock_irqsave(&rds_conn_lock, flags); |