lockdep_rtnl_is_held() ||               \
                                list_empty(&net->ipv4.mr_tables))
 
+static bool ipmr_can_free_table(struct net *net)
+{
+       return !check_net(net) || !net->ipv4.mr_rules_ops;
+}
+
 static struct mr_table *ipmr_mr_table_iter(struct net *net,
                                           struct mr_table *mrt)
 {
 #define ipmr_for_each_table(mrt, net) \
        for (mrt = net->ipv4.mrt; mrt; mrt = NULL)
 
+static bool ipmr_can_free_table(struct net *net)
+{
+       return !check_net(net);
+}
+
 static struct mr_table *ipmr_mr_table_iter(struct net *net,
                                           struct mr_table *mrt)
 {
 
 static void ipmr_free_table(struct mr_table *mrt)
 {
+       struct net *net = read_pnet(&mrt->net);
+
+       DEBUG_NET_WARN_ON_ONCE(!ipmr_can_free_table(net));
+
        timer_shutdown_sync(&mrt->ipmr_expire_timer);
        mroute_clean_tables(mrt, MRT_FLUSH_VIFS | MRT_FLUSH_VIFS_STATIC |
                                 MRT_FLUSH_MFC | MRT_FLUSH_MFC_STATIC);
 
                                lockdep_rtnl_is_held() || \
                                list_empty(&net->ipv6.mr6_tables))
 
+static bool ip6mr_can_free_table(struct net *net)
+{
+       return !check_net(net) || !net->ipv6.mr6_rules_ops;
+}
+
 static struct mr_table *ip6mr_mr_table_iter(struct net *net,
                                            struct mr_table *mrt)
 {
 #define ip6mr_for_each_table(mrt, net) \
        for (mrt = net->ipv6.mrt6; mrt; mrt = NULL)
 
+static bool ip6mr_can_free_table(struct net *net)
+{
+       return !check_net(net);
+}
+
 static struct mr_table *ip6mr_mr_table_iter(struct net *net,
                                            struct mr_table *mrt)
 {
 
 static void ip6mr_free_table(struct mr_table *mrt)
 {
+       struct net *net = read_pnet(&mrt->net);
+
+       DEBUG_NET_WARN_ON_ONCE(!ip6mr_can_free_table(net));
+
        timer_shutdown_sync(&mrt->ipmr_expire_timer);
        mroute_clean_tables(mrt, MRT6_FLUSH_MIFS | MRT6_FLUSH_MIFS_STATIC |
                                 MRT6_FLUSH_MFC | MRT6_FLUSH_MFC_STATIC);