unsigned int            hmask;
 };
 
-static struct hlist_head xfrm_policy_inexact[XFRM_POLICY_MAX*2];
 static struct xfrm_policy_hash xfrm_policy_bydst[XFRM_POLICY_MAX*2] __read_mostly;
 static unsigned int xfrm_policy_hashmax __read_mostly = 1 * 1024 * 1024;
 
        unsigned int hash = __sel_hash(sel, family, hmask);
 
        return (hash == hmask + 1 ?
-               &xfrm_policy_inexact[dir] :
+               &init_net.xfrm.policy_inexact[dir] :
                xfrm_policy_bydst[dir].table + hash);
 }
 
                int i;
 
                hlist_for_each_entry(pol, entry,
-                                    &xfrm_policy_inexact[dir], bydst) {
+                                    &init_net.xfrm.policy_inexact[dir], bydst) {
                        if (pol->type != type)
                                continue;
                        err = security_xfrm_policy_delete(pol->security);
                killed = 0;
        again1:
                hlist_for_each_entry(pol, entry,
-                                    &xfrm_policy_inexact[dir], bydst) {
+                                    &init_net.xfrm.policy_inexact[dir], bydst) {
                        if (pol->type != type)
                                continue;
                        hlist_del(&pol->bydst);
                        break;
                }
        }
-       chain = &xfrm_policy_inexact[dir];
+       chain = &init_net.xfrm.policy_inexact[dir];
        hlist_for_each_entry(pol, entry, chain, bydst) {
                err = xfrm_policy_match(pol, fl, type, family, dir);
                if (err) {
                int i;
 
                hlist_for_each_entry(pol, entry,
-                                    &xfrm_policy_inexact[dir], bydst)
+                                    &init_net.xfrm.policy_inexact[dir], bydst)
                        prune_one_bundle(pol, func, &gc_list);
 
                table = xfrm_policy_bydst[dir].table;
        for (dir = 0; dir < XFRM_POLICY_MAX * 2; dir++) {
                struct xfrm_policy_hash *htab;
 
-               INIT_HLIST_HEAD(&xfrm_policy_inexact[dir]);
+               INIT_HLIST_HEAD(&net->xfrm.policy_inexact[dir]);
 
                htab = &xfrm_policy_bydst[dir];
                htab->table = xfrm_hash_alloc(sz);
 static void xfrm_policy_fini(struct net *net)
 {
        unsigned int sz;
+       int dir;
 
        WARN_ON(!list_empty(&net->xfrm.policy_all));
 
+       for (dir = 0; dir < XFRM_POLICY_MAX * 2; dir++) {
+               WARN_ON(!hlist_empty(&net->xfrm.policy_inexact[dir]));
+       }
+
        sz = (net->xfrm.policy_idx_hmask + 1) * sizeof(struct hlist_head);
        WARN_ON(!hlist_empty(net->xfrm.policy_byidx));
        xfrm_hash_free(net->xfrm.policy_byidx, sz);
                        break;
                }
        }
-       chain = &xfrm_policy_inexact[dir];
+       chain = &init_net.xfrm.policy_inexact[dir];
        hlist_for_each_entry(pol, entry, chain, bydst) {
                if (xfrm_migrate_selector_match(sel, &pol->selector) &&
                    pol->type == type &&