hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/net/core/net_namespace.c
....@@ -72,18 +72,6 @@
7272
7373 DEFINE_COOKIE(net_cookie);
7474
75
-u64 __net_gen_cookie(struct net *net)
76
-{
77
- while (1) {
78
- u64 res = atomic64_read(&net->net_cookie);
79
-
80
- if (res)
81
- return res;
82
- res = gen_cookie_next(&net_cookie);
83
- atomic64_cmpxchg(&net->net_cookie, 0, res);
84
- }
85
-}
86
-
8775 static struct net_generic *net_alloc_generic(void)
8876 {
8977 struct net_generic *ng;
....@@ -155,12 +143,12 @@
155143 return 0;
156144
157145 if (ops->id && ops->size) {
158
-cleanup:
159146 ng = rcu_dereference_protected(net->gen,
160147 lockdep_is_held(&pernet_ops_rwsem));
161148 ng->ptr[*ops->id] = NULL;
162149 }
163150
151
+cleanup:
164152 kfree(data);
165153
166154 out:
....@@ -341,6 +329,9 @@
341329 refcount_set(&net->count, 1);
342330 refcount_set(&net->passive, 1);
343331 get_random_bytes(&net->hash_mix, sizeof(u32));
332
+ preempt_disable();
333
+ atomic64_set(&net->net_cookie, gen_cookie_next(&net_cookie));
334
+ preempt_enable();
344335 net->dev_base_seq = 1;
345336 net->user_ns = user_ns;
346337 idr_init(&net->netns_ids);
....@@ -1127,10 +1118,6 @@
11271118 panic("Could not allocate generic netns");
11281119
11291120 rcu_assign_pointer(init_net.gen, ng);
1130
-
1131
- preempt_disable();
1132
- __net_gen_cookie(&init_net);
1133
- preempt_enable();
11341121
11351122 down_write(&pernet_ops_rwsem);
11361123 if (setup_net(&init_net, &init_user_ns))