const struct ipt_replace *repl,
                       const struct nf_hook_ops *ops, struct xt_table **res);
 
-void ipt_unregister_table_pre_exit(struct net *net, struct xt_table *table,
-                      const struct nf_hook_ops *ops);
+void ipt_unregister_table_pre_exit(struct net *net, const char *name,
+                                  const struct nf_hook_ops *ops);
 
-void ipt_unregister_table_exit(struct net *net, struct xt_table *table);
+void ipt_unregister_table_exit(struct net *net, const char *name);
 
 /* Standard entry. */
 struct ipt_standard {
 
        return ret;
 }
 
-void ipt_unregister_table_pre_exit(struct net *net, struct xt_table *table,
+void ipt_unregister_table_pre_exit(struct net *net, const char *name,
                                   const struct nf_hook_ops *ops)
 {
-       nf_unregister_net_hooks(net, ops, hweight32(table->valid_hooks));
+       struct xt_table *table = xt_find_table(net, NFPROTO_IPV4, name);
+
+       if (table)
+               nf_unregister_net_hooks(net, ops, hweight32(table->valid_hooks));
 }
 
-void ipt_unregister_table_exit(struct net *net, struct xt_table *table)
+void ipt_unregister_table_exit(struct net *net, const char *name)
 {
-       __ipt_unregister_table(net, table);
+       struct xt_table *table = xt_find_table(net, NFPROTO_IPV4, name);
+
+       if (table)
+               __ipt_unregister_table(net, table);
 }
 
 /* Returns 1 if the type and code is matched by the range, 0 otherwise */
 
 
 static void __net_exit iptable_filter_net_pre_exit(struct net *net)
 {
-       if (net->ipv4.iptable_filter)
-               ipt_unregister_table_pre_exit(net, net->ipv4.iptable_filter,
-                                             filter_ops);
+       ipt_unregister_table_pre_exit(net, "filter", filter_ops);
 }
 
 static void __net_exit iptable_filter_net_exit(struct net *net)
 {
-       if (!net->ipv4.iptable_filter)
-               return;
-       ipt_unregister_table_exit(net, net->ipv4.iptable_filter);
+       ipt_unregister_table_exit(net, "filter");
        net->ipv4.iptable_filter = NULL;
 }
 
 
 
 static void __net_exit iptable_mangle_net_pre_exit(struct net *net)
 {
-       if (net->ipv4.iptable_mangle)
-               ipt_unregister_table_pre_exit(net, net->ipv4.iptable_mangle,
-                                             mangle_ops);
+       ipt_unregister_table_pre_exit(net, "mangle", mangle_ops);
 }
 
 static void __net_exit iptable_mangle_net_exit(struct net *net)
 {
-       if (!net->ipv4.iptable_mangle)
-               return;
-       ipt_unregister_table_exit(net, net->ipv4.iptable_mangle);
+       ipt_unregister_table_exit(net, "mangle");
        net->ipv4.iptable_mangle = NULL;
 }
 
 
 
        ret = ipt_nat_register_lookups(net);
        if (ret < 0) {
-               ipt_unregister_table_exit(net, net->ipv4.nat_table);
+               ipt_unregister_table_exit(net, "nat");
                net->ipv4.nat_table = NULL;
        }
 
 
 static void __net_exit iptable_nat_net_exit(struct net *net)
 {
-       if (!net->ipv4.nat_table)
-               return;
-       ipt_unregister_table_exit(net, net->ipv4.nat_table);
+       ipt_unregister_table_exit(net, "nat");
        net->ipv4.nat_table = NULL;
 }
 
 
 
 static void __net_exit iptable_raw_net_pre_exit(struct net *net)
 {
-       if (net->ipv4.iptable_raw)
-               ipt_unregister_table_pre_exit(net, net->ipv4.iptable_raw,
-                                             rawtable_ops);
+       ipt_unregister_table_pre_exit(net, "raw", rawtable_ops);
 }
 
 static void __net_exit iptable_raw_net_exit(struct net *net)
 {
-       if (!net->ipv4.iptable_raw)
-               return;
-       ipt_unregister_table_exit(net, net->ipv4.iptable_raw);
+       ipt_unregister_table_exit(net, "raw");
        net->ipv4.iptable_raw = NULL;
 }
 
 
 
 static void __net_exit iptable_security_net_pre_exit(struct net *net)
 {
-       if (net->ipv4.iptable_security)
-               ipt_unregister_table_pre_exit(net, net->ipv4.iptable_security,
-                                             sectbl_ops);
+       ipt_unregister_table_pre_exit(net, "security", sectbl_ops);
 }
 
 static void __net_exit iptable_security_net_exit(struct net *net)
 {
-       if (!net->ipv4.iptable_security)
-               return;
-       ipt_unregister_table_exit(net, net->ipv4.iptable_security);
+       ipt_unregister_table_exit(net, "security");
        net->ipv4.iptable_security = NULL;
 }