diff options
author | Reshetova, Elena <elena.reshetova@intel.com> | 2017-06-30 13:08:08 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-07-01 17:39:09 +0300 |
commit | c122e14df2d64311d1f0c0bbf4d8f42a7a8baf41 (patch) | |
tree | 124cc4cd33a74c741a7f611b2143a37b00c0e19c /net/core/net_namespace.c | |
parent | edcb691871b27c3cc463b7291afe75f1c3423406 (diff) | |
download | linux-c122e14df2d64311d1f0c0bbf4d8f42a7a8baf41.tar.xz |
net: convert net.passive from atomic_t to refcount_t
refcount_t type and corresponding API should be
used instead of atomic_t when the variable is used as
a reference counter. This allows to avoid accidental
refcounter overflows that might lead to use-after-free
situations.
Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: David Windsor <dwindsor@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/net_namespace.c')
-rw-r--r-- | net/core/net_namespace.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 6a2f41288249..8726d051f31d 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -284,7 +284,7 @@ static __net_init int setup_net(struct net *net, struct user_namespace *user_ns) LIST_HEAD(net_exit_list); atomic_set(&net->count, 1); - atomic_set(&net->passive, 1); + refcount_set(&net->passive, 1); net->dev_base_seq = 1; net->user_ns = user_ns; idr_init(&net->netns_ids); @@ -380,7 +380,7 @@ static void net_free(struct net *net) void net_drop_ns(void *p) { struct net *ns = p; - if (ns && atomic_dec_and_test(&ns->passive)) + if (ns && refcount_dec_and_test(&ns->passive)) net_free(ns); } |