@@ -310,35 +310,36 @@ struct net *get_net_ns_by_id(const struct net *net, int id)
310310EXPORT_SYMBOL_GPL (get_net_ns_by_id );
311311
312312/* init code that must occur even if setup_net() is not called. */
313- static __net_init void preinit_net (struct net * net )
313+ static __net_init void preinit_net (struct net * net , struct user_namespace * user_ns )
314314{
315315 refcount_set (& net -> passive , 1 );
316+ refcount_set (& net -> ns .count , 1 );
317+ ref_tracker_dir_init (& net -> refcnt_tracker , 128 , "net refcnt" );
316318 ref_tracker_dir_init (& net -> notrefcnt_tracker , 128 , "net notrefcnt" );
319+
320+ get_random_bytes (& net -> hash_mix , sizeof (u32 ));
321+ net -> dev_base_seq = 1 ;
322+ net -> user_ns = user_ns ;
323+
324+ idr_init (& net -> netns_ids );
325+ spin_lock_init (& net -> nsid_lock );
326+ mutex_init (& net -> ipv4 .ra_mutex );
317327}
318328
319329/*
320330 * setup_net runs the initializers for the network namespace object.
321331 */
322- static __net_init int setup_net (struct net * net , struct user_namespace * user_ns )
332+ static __net_init int setup_net (struct net * net )
323333{
324334 /* Must be called with pernet_ops_rwsem held */
325335 const struct pernet_operations * ops , * saved_ops ;
326336 LIST_HEAD (net_exit_list );
327337 LIST_HEAD (dev_kill_list );
328338 int error = 0 ;
329339
330- refcount_set (& net -> ns .count , 1 );
331- ref_tracker_dir_init (& net -> refcnt_tracker , 128 , "net refcnt" );
332-
333- get_random_bytes (& net -> hash_mix , sizeof (u32 ));
334340 preempt_disable ();
335341 net -> net_cookie = gen_cookie_next (& net_cookie );
336342 preempt_enable ();
337- net -> dev_base_seq = 1 ;
338- net -> user_ns = user_ns ;
339- idr_init (& net -> netns_ids );
340- spin_lock_init (& net -> nsid_lock );
341- mutex_init (& net -> ipv4 .ra_mutex );
342343
343344 list_for_each_entry (ops , & pernet_list , list ) {
344345 error = ops_init (ops , net );
@@ -497,15 +498,15 @@ struct net *copy_net_ns(unsigned long flags,
497498 goto dec_ucounts ;
498499 }
499500
500- preinit_net (net );
501+ preinit_net (net , user_ns );
501502 net -> ucounts = ucounts ;
502503 get_user_ns (user_ns );
503504
504505 rv = down_read_killable (& pernet_ops_rwsem );
505506 if (rv < 0 )
506507 goto put_userns ;
507508
508- rv = setup_net (net , user_ns );
509+ rv = setup_net (net );
509510
510511 up_read (& pernet_ops_rwsem );
511512
@@ -1199,10 +1200,10 @@ void __init net_ns_init(void)
11991200#ifdef CONFIG_KEYS
12001201 init_net .key_domain = & init_net_key_domain ;
12011202#endif
1202- preinit_net (& init_net );
1203+ preinit_net (& init_net , & init_user_ns );
12031204
12041205 down_write (& pernet_ops_rwsem );
1205- if (setup_net (& init_net , & init_user_ns ))
1206+ if (setup_net (& init_net ))
12061207 panic ("Could not setup the initial network namespace" );
12071208
12081209 init_net_initialized = true;
0 commit comments