struct sock;
 struct ctl_table_header;
 struct net_generic;
-struct sock;
+struct uevent_sock;
 struct netns_ipvs;
 
 
        struct sock             *rtnl;                  /* rtnetlink socket */
        struct sock             *genl_sock;
 
+       struct uevent_sock      *uevent_sock;           /* uevent socket */
+
        struct list_head        dev_base_head;
        struct hlist_head       *dev_name_head;
        struct hlist_head       *dev_index_head;
 
 #ifdef CONFIG_UEVENT_HELPER
 char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
 #endif
-#ifdef CONFIG_NET
+
 struct uevent_sock {
        struct list_head list;
        struct sock *sk;
 };
+
+#ifdef CONFIG_NET
 static LIST_HEAD(uevent_sock_list);
 #endif
 
                kfree(ue_sk);
                return -ENODEV;
        }
+
+       net->uevent_sock = ue_sk;
+
        mutex_lock(&uevent_sock_mutex);
        list_add_tail(&ue_sk->list, &uevent_sock_list);
        mutex_unlock(&uevent_sock_mutex);
 
 static void uevent_net_exit(struct net *net)
 {
-       struct uevent_sock *ue_sk;
+       struct uevent_sock *ue_sk = net->uevent_sock;
 
        mutex_lock(&uevent_sock_mutex);
-       list_for_each_entry(ue_sk, &uevent_sock_list, list) {
-               if (sock_net(ue_sk->sk) == net)
-                       goto found;
-       }
-       mutex_unlock(&uevent_sock_mutex);
-       return;
-
-found:
        list_del(&ue_sk->list);
        mutex_unlock(&uevent_sock_mutex);