|
@@ -325,21 +325,24 @@ static void htable_gc(unsigned long htlong)
|
|
|
add_timer(&ht->timer);
|
|
|
}
|
|
|
|
|
|
-static void htable_destroy(struct xt_hashlimit_htable *hinfo)
|
|
|
+static void htable_remove_proc_entry(struct xt_hashlimit_htable *hinfo)
|
|
|
{
|
|
|
struct hashlimit_net *hashlimit_net = hashlimit_pernet(hinfo->net);
|
|
|
struct proc_dir_entry *parent;
|
|
|
|
|
|
- del_timer_sync(&hinfo->timer);
|
|
|
-
|
|
|
if (hinfo->family == NFPROTO_IPV4)
|
|
|
parent = hashlimit_net->ipt_hashlimit;
|
|
|
else
|
|
|
parent = hashlimit_net->ip6t_hashlimit;
|
|
|
|
|
|
- if(parent != NULL)
|
|
|
+ if (parent != NULL)
|
|
|
remove_proc_entry(hinfo->name, parent);
|
|
|
+}
|
|
|
|
|
|
+static void htable_destroy(struct xt_hashlimit_htable *hinfo)
|
|
|
+{
|
|
|
+ del_timer_sync(&hinfo->timer);
|
|
|
+ htable_remove_proc_entry(hinfo);
|
|
|
htable_selective_cleanup(hinfo, select_all);
|
|
|
kfree(hinfo->name);
|
|
|
vfree(hinfo);
|
|
@@ -883,21 +886,15 @@ static int __net_init hashlimit_proc_net_init(struct net *net)
|
|
|
static void __net_exit hashlimit_proc_net_exit(struct net *net)
|
|
|
{
|
|
|
struct xt_hashlimit_htable *hinfo;
|
|
|
- struct proc_dir_entry *pde;
|
|
|
struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
|
|
|
|
|
|
- /* recent_net_exit() is called before recent_mt_destroy(). Make sure
|
|
|
- * that the parent xt_recent proc entry is is empty before trying to
|
|
|
- * remove it.
|
|
|
+ /* hashlimit_net_exit() is called before hashlimit_mt_destroy().
|
|
|
+ * Make sure that the parent ipt_hashlimit and ip6t_hashlimit proc
|
|
|
+ * entries is empty before trying to remove it.
|
|
|
*/
|
|
|
mutex_lock(&hashlimit_mutex);
|
|
|
- pde = hashlimit_net->ipt_hashlimit;
|
|
|
- if (pde == NULL)
|
|
|
- pde = hashlimit_net->ip6t_hashlimit;
|
|
|
-
|
|
|
hlist_for_each_entry(hinfo, &hashlimit_net->htables, node)
|
|
|
- remove_proc_entry(hinfo->name, pde);
|
|
|
-
|
|
|
+ htable_remove_proc_entry(hinfo);
|
|
|
hashlimit_net->ipt_hashlimit = NULL;
|
|
|
hashlimit_net->ip6t_hashlimit = NULL;
|
|
|
mutex_unlock(&hashlimit_mutex);
|