Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/livepatchin...
[linux-2.6-block.git] / net / netfilter / xt_hashlimit.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *      xt_hashlimit - Netfilter module to limit the number of packets per time
4  *      separately for each hashbucket (sourceip/sourceport/dstip/dstport)
5  *
6  *      (C) 2003-2004 by Harald Welte <laforge@netfilter.org>
7  *      (C) 2006-2012 Patrick McHardy <kaber@trash.net>
8  *      Copyright © CC Computer Consultants GmbH, 2007 - 2008
9  *
10  * Development of this code was funded by Astaro AG, http://www.astaro.com/
11  */
12 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13 #include <linux/module.h>
14 #include <linux/spinlock.h>
15 #include <linux/random.h>
16 #include <linux/jhash.h>
17 #include <linux/slab.h>
18 #include <linux/vmalloc.h>
19 #include <linux/proc_fs.h>
20 #include <linux/seq_file.h>
21 #include <linux/list.h>
22 #include <linux/skbuff.h>
23 #include <linux/mm.h>
24 #include <linux/in.h>
25 #include <linux/ip.h>
26 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
27 #include <linux/ipv6.h>
28 #include <net/ipv6.h>
29 #endif
30
31 #include <net/net_namespace.h>
32 #include <net/netns/generic.h>
33
34 #include <linux/netfilter/x_tables.h>
35 #include <linux/netfilter_ipv4/ip_tables.h>
36 #include <linux/netfilter_ipv6/ip6_tables.h>
37 #include <linux/mutex.h>
38 #include <linux/kernel.h>
39 #include <uapi/linux/netfilter/xt_hashlimit.h>
40
41 #define XT_HASHLIMIT_ALL (XT_HASHLIMIT_HASH_DIP | XT_HASHLIMIT_HASH_DPT | \
42                           XT_HASHLIMIT_HASH_SIP | XT_HASHLIMIT_HASH_SPT | \
43                           XT_HASHLIMIT_INVERT | XT_HASHLIMIT_BYTES |\
44                           XT_HASHLIMIT_RATE_MATCH)
45
46 MODULE_LICENSE("GPL");
47 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
48 MODULE_AUTHOR("Jan Engelhardt <jengelh@medozas.de>");
49 MODULE_DESCRIPTION("Xtables: per hash-bucket rate-limit match");
50 MODULE_ALIAS("ipt_hashlimit");
51 MODULE_ALIAS("ip6t_hashlimit");
52
53 struct hashlimit_net {
54         struct hlist_head       htables;
55         struct proc_dir_entry   *ipt_hashlimit;
56         struct proc_dir_entry   *ip6t_hashlimit;
57 };
58
59 static unsigned int hashlimit_net_id;
60 static inline struct hashlimit_net *hashlimit_pernet(struct net *net)
61 {
62         return net_generic(net, hashlimit_net_id);
63 }
64
65 /* need to declare this at the top */
66 static const struct seq_operations dl_seq_ops_v2;
67 static const struct seq_operations dl_seq_ops_v1;
68 static const struct seq_operations dl_seq_ops;
69
70 /* hash table crap */
71 struct dsthash_dst {
72         union {
73                 struct {
74                         __be32 src;
75                         __be32 dst;
76                 } ip;
77 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
78                 struct {
79                         __be32 src[4];
80                         __be32 dst[4];
81                 } ip6;
82 #endif
83         };
84         __be16 src_port;
85         __be16 dst_port;
86 };
87
88 struct dsthash_ent {
89         /* static / read-only parts in the beginning */
90         struct hlist_node node;
91         struct dsthash_dst dst;
92
93         /* modified structure members in the end */
94         spinlock_t lock;
95         unsigned long expires;          /* precalculated expiry time */
96         struct {
97                 unsigned long prev;     /* last modification */
98                 union {
99                         struct {
100                                 u_int64_t credit;
101                                 u_int64_t credit_cap;
102                                 u_int64_t cost;
103                         };
104                         struct {
105                                 u_int32_t interval, prev_window;
106                                 u_int64_t current_rate;
107                                 u_int64_t rate;
108                                 int64_t burst;
109                         };
110                 };
111         } rateinfo;
112         struct rcu_head rcu;
113 };
114
115 struct xt_hashlimit_htable {
116         struct hlist_node node;         /* global list of all htables */
117         int use;
118         u_int8_t family;
119         bool rnd_initialized;
120
121         struct hashlimit_cfg3 cfg;      /* config */
122
123         /* used internally */
124         spinlock_t lock;                /* lock for list_head */
125         u_int32_t rnd;                  /* random seed for hash */
126         unsigned int count;             /* number entries in table */
127         struct delayed_work gc_work;
128
129         /* seq_file stuff */
130         struct proc_dir_entry *pde;
131         const char *name;
132         struct net *net;
133
134         struct hlist_head hash[0];      /* hashtable itself */
135 };
136
137 static int
138 cfg_copy(struct hashlimit_cfg3 *to, const void *from, int revision)
139 {
140         if (revision == 1) {
141                 struct hashlimit_cfg1 *cfg = (struct hashlimit_cfg1 *)from;
142
143                 to->mode = cfg->mode;
144                 to->avg = cfg->avg;
145                 to->burst = cfg->burst;
146                 to->size = cfg->size;
147                 to->max = cfg->max;
148                 to->gc_interval = cfg->gc_interval;
149                 to->expire = cfg->expire;
150                 to->srcmask = cfg->srcmask;
151                 to->dstmask = cfg->dstmask;
152         } else if (revision == 2) {
153                 struct hashlimit_cfg2 *cfg = (struct hashlimit_cfg2 *)from;
154
155                 to->mode = cfg->mode;
156                 to->avg = cfg->avg;
157                 to->burst = cfg->burst;
158                 to->size = cfg->size;
159                 to->max = cfg->max;
160                 to->gc_interval = cfg->gc_interval;
161                 to->expire = cfg->expire;
162                 to->srcmask = cfg->srcmask;
163                 to->dstmask = cfg->dstmask;
164         } else if (revision == 3) {
165                 memcpy(to, from, sizeof(struct hashlimit_cfg3));
166         } else {
167                 return -EINVAL;
168         }
169
170         return 0;
171 }
172
173 static DEFINE_MUTEX(hashlimit_mutex);   /* protects htables list */
174 static struct kmem_cache *hashlimit_cachep __read_mostly;
175
176 static inline bool dst_cmp(const struct dsthash_ent *ent,
177                            const struct dsthash_dst *b)
178 {
179         return !memcmp(&ent->dst, b, sizeof(ent->dst));
180 }
181
182 static u_int32_t
183 hash_dst(const struct xt_hashlimit_htable *ht, const struct dsthash_dst *dst)
184 {
185         u_int32_t hash = jhash2((const u32 *)dst,
186                                 sizeof(*dst)/sizeof(u32),
187                                 ht->rnd);
188         /*
189          * Instead of returning hash % ht->cfg.size (implying a divide)
190          * we return the high 32 bits of the (hash * ht->cfg.size) that will
191          * give results between [0 and cfg.size-1] and same hash distribution,
192          * but using a multiply, less expensive than a divide
193          */
194         return reciprocal_scale(hash, ht->cfg.size);
195 }
196
197 static struct dsthash_ent *
198 dsthash_find(const struct xt_hashlimit_htable *ht,
199              const struct dsthash_dst *dst)
200 {
201         struct dsthash_ent *ent;
202         u_int32_t hash = hash_dst(ht, dst);
203
204         if (!hlist_empty(&ht->hash[hash])) {
205                 hlist_for_each_entry_rcu(ent, &ht->hash[hash], node)
206                         if (dst_cmp(ent, dst)) {
207                                 spin_lock(&ent->lock);
208                                 return ent;
209                         }
210         }
211         return NULL;
212 }
213
214 /* allocate dsthash_ent, initialize dst, put in htable and lock it */
215 static struct dsthash_ent *
216 dsthash_alloc_init(struct xt_hashlimit_htable *ht,
217                    const struct dsthash_dst *dst, bool *race)
218 {
219         struct dsthash_ent *ent;
220
221         spin_lock(&ht->lock);
222
223         /* Two or more packets may race to create the same entry in the
224          * hashtable, double check if this packet lost race.
225          */
226         ent = dsthash_find(ht, dst);
227         if (ent != NULL) {
228                 spin_unlock(&ht->lock);
229                 *race = true;
230                 return ent;
231         }
232
233         /* initialize hash with random val at the time we allocate
234          * the first hashtable entry */
235         if (unlikely(!ht->rnd_initialized)) {
236                 get_random_bytes(&ht->rnd, sizeof(ht->rnd));
237                 ht->rnd_initialized = true;
238         }
239
240         if (ht->cfg.max && ht->count >= ht->cfg.max) {
241                 /* FIXME: do something. question is what.. */
242                 net_err_ratelimited("max count of %u reached\n", ht->cfg.max);
243                 ent = NULL;
244         } else
245                 ent = kmem_cache_alloc(hashlimit_cachep, GFP_ATOMIC);
246         if (ent) {
247                 memcpy(&ent->dst, dst, sizeof(ent->dst));
248                 spin_lock_init(&ent->lock);
249
250                 spin_lock(&ent->lock);
251                 hlist_add_head_rcu(&ent->node, &ht->hash[hash_dst(ht, dst)]);
252                 ht->count++;
253         }
254         spin_unlock(&ht->lock);
255         return ent;
256 }
257
258 static void dsthash_free_rcu(struct rcu_head *head)
259 {
260         struct dsthash_ent *ent = container_of(head, struct dsthash_ent, rcu);
261
262         kmem_cache_free(hashlimit_cachep, ent);
263 }
264
265 static inline void
266 dsthash_free(struct xt_hashlimit_htable *ht, struct dsthash_ent *ent)
267 {
268         hlist_del_rcu(&ent->node);
269         call_rcu(&ent->rcu, dsthash_free_rcu);
270         ht->count--;
271 }
272 static void htable_gc(struct work_struct *work);
273
274 static int htable_create(struct net *net, struct hashlimit_cfg3 *cfg,
275                          const char *name, u_int8_t family,
276                          struct xt_hashlimit_htable **out_hinfo,
277                          int revision)
278 {
279         struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
280         struct xt_hashlimit_htable *hinfo;
281         const struct seq_operations *ops;
282         unsigned int size, i;
283         unsigned long nr_pages = totalram_pages();
284         int ret;
285
286         if (cfg->size) {
287                 size = cfg->size;
288         } else {
289                 size = (nr_pages << PAGE_SHIFT) / 16384 /
290                        sizeof(struct hlist_head);
291                 if (nr_pages > 1024 * 1024 * 1024 / PAGE_SIZE)
292                         size = 8192;
293                 if (size < 16)
294                         size = 16;
295         }
296         /* FIXME: don't use vmalloc() here or anywhere else -HW */
297         hinfo = vmalloc(struct_size(hinfo, hash, size));
298         if (hinfo == NULL)
299                 return -ENOMEM;
300         *out_hinfo = hinfo;
301
302         /* copy match config into hashtable config */
303         ret = cfg_copy(&hinfo->cfg, (void *)cfg, 3);
304         if (ret) {
305                 vfree(hinfo);
306                 return ret;
307         }
308
309         hinfo->cfg.size = size;
310         if (hinfo->cfg.max == 0)
311                 hinfo->cfg.max = 8 * hinfo->cfg.size;
312         else if (hinfo->cfg.max < hinfo->cfg.size)
313                 hinfo->cfg.max = hinfo->cfg.size;
314
315         for (i = 0; i < hinfo->cfg.size; i++)
316                 INIT_HLIST_HEAD(&hinfo->hash[i]);
317
318         hinfo->use = 1;
319         hinfo->count = 0;
320         hinfo->family = family;
321         hinfo->rnd_initialized = false;
322         hinfo->name = kstrdup(name, GFP_KERNEL);
323         if (!hinfo->name) {
324                 vfree(hinfo);
325                 return -ENOMEM;
326         }
327         spin_lock_init(&hinfo->lock);
328
329         switch (revision) {
330         case 1:
331                 ops = &dl_seq_ops_v1;
332                 break;
333         case 2:
334                 ops = &dl_seq_ops_v2;
335                 break;
336         default:
337                 ops = &dl_seq_ops;
338         }
339
340         hinfo->pde = proc_create_seq_data(name, 0,
341                 (family == NFPROTO_IPV4) ?
342                 hashlimit_net->ipt_hashlimit : hashlimit_net->ip6t_hashlimit,
343                 ops, hinfo);
344         if (hinfo->pde == NULL) {
345                 kfree(hinfo->name);
346                 vfree(hinfo);
347                 return -ENOMEM;
348         }
349         hinfo->net = net;
350
351         INIT_DEFERRABLE_WORK(&hinfo->gc_work, htable_gc);
352         queue_delayed_work(system_power_efficient_wq, &hinfo->gc_work,
353                            msecs_to_jiffies(hinfo->cfg.gc_interval));
354
355         hlist_add_head(&hinfo->node, &hashlimit_net->htables);
356
357         return 0;
358 }
359
360 static bool select_all(const struct xt_hashlimit_htable *ht,
361                        const struct dsthash_ent *he)
362 {
363         return true;
364 }
365
366 static bool select_gc(const struct xt_hashlimit_htable *ht,
367                       const struct dsthash_ent *he)
368 {
369         return time_after_eq(jiffies, he->expires);
370 }
371
372 static void htable_selective_cleanup(struct xt_hashlimit_htable *ht,
373                         bool (*select)(const struct xt_hashlimit_htable *ht,
374                                       const struct dsthash_ent *he))
375 {
376         unsigned int i;
377
378         for (i = 0; i < ht->cfg.size; i++) {
379                 struct dsthash_ent *dh;
380                 struct hlist_node *n;
381
382                 spin_lock_bh(&ht->lock);
383                 hlist_for_each_entry_safe(dh, n, &ht->hash[i], node) {
384                         if ((*select)(ht, dh))
385                                 dsthash_free(ht, dh);
386                 }
387                 spin_unlock_bh(&ht->lock);
388                 cond_resched();
389         }
390 }
391
392 static void htable_gc(struct work_struct *work)
393 {
394         struct xt_hashlimit_htable *ht;
395
396         ht = container_of(work, struct xt_hashlimit_htable, gc_work.work);
397
398         htable_selective_cleanup(ht, select_gc);
399
400         queue_delayed_work(system_power_efficient_wq,
401                            &ht->gc_work, msecs_to_jiffies(ht->cfg.gc_interval));
402 }
403
404 static void htable_remove_proc_entry(struct xt_hashlimit_htable *hinfo)
405 {
406         struct hashlimit_net *hashlimit_net = hashlimit_pernet(hinfo->net);
407         struct proc_dir_entry *parent;
408
409         if (hinfo->family == NFPROTO_IPV4)
410                 parent = hashlimit_net->ipt_hashlimit;
411         else
412                 parent = hashlimit_net->ip6t_hashlimit;
413
414         if (parent != NULL)
415                 remove_proc_entry(hinfo->name, parent);
416 }
417
418 static void htable_destroy(struct xt_hashlimit_htable *hinfo)
419 {
420         cancel_delayed_work_sync(&hinfo->gc_work);
421         htable_remove_proc_entry(hinfo);
422         htable_selective_cleanup(hinfo, select_all);
423         kfree(hinfo->name);
424         vfree(hinfo);
425 }
426
427 static struct xt_hashlimit_htable *htable_find_get(struct net *net,
428                                                    const char *name,
429                                                    u_int8_t family)
430 {
431         struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
432         struct xt_hashlimit_htable *hinfo;
433
434         hlist_for_each_entry(hinfo, &hashlimit_net->htables, node) {
435                 if (!strcmp(name, hinfo->name) &&
436                     hinfo->family == family) {
437                         hinfo->use++;
438                         return hinfo;
439                 }
440         }
441         return NULL;
442 }
443
444 static void htable_put(struct xt_hashlimit_htable *hinfo)
445 {
446         mutex_lock(&hashlimit_mutex);
447         if (--hinfo->use == 0) {
448                 hlist_del(&hinfo->node);
449                 htable_destroy(hinfo);
450         }
451         mutex_unlock(&hashlimit_mutex);
452 }
453
454 /* The algorithm used is the Simple Token Bucket Filter (TBF)
455  * see net/sched/sch_tbf.c in the linux source tree
456  */
457
458 /* Rusty: This is my (non-mathematically-inclined) understanding of
459    this algorithm.  The `average rate' in jiffies becomes your initial
460    amount of credit `credit' and the most credit you can ever have
461    `credit_cap'.  The `peak rate' becomes the cost of passing the
462    test, `cost'.
463
464    `prev' tracks the last packet hit: you gain one credit per jiffy.
465    If you get credit balance more than this, the extra credit is
466    discarded.  Every time the match passes, you lose `cost' credits;
467    if you don't have that many, the test fails.
468
469    See Alexey's formal explanation in net/sched/sch_tbf.c.
470
471    To get the maximum range, we multiply by this factor (ie. you get N
472    credits per jiffy).  We want to allow a rate as low as 1 per day
473    (slowest userspace tool allows), which means
474    CREDITS_PER_JIFFY*HZ*60*60*24 < 2^32 ie.
475 */
476 #define MAX_CPJ_v1 (0xFFFFFFFF / (HZ*60*60*24))
477 #define MAX_CPJ (0xFFFFFFFFFFFFFFFFULL / (HZ*60*60*24))
478
479 /* Repeated shift and or gives us all 1s, final shift and add 1 gives
480  * us the power of 2 below the theoretical max, so GCC simply does a
481  * shift. */
482 #define _POW2_BELOW2(x) ((x)|((x)>>1))
483 #define _POW2_BELOW4(x) (_POW2_BELOW2(x)|_POW2_BELOW2((x)>>2))
484 #define _POW2_BELOW8(x) (_POW2_BELOW4(x)|_POW2_BELOW4((x)>>4))
485 #define _POW2_BELOW16(x) (_POW2_BELOW8(x)|_POW2_BELOW8((x)>>8))
486 #define _POW2_BELOW32(x) (_POW2_BELOW16(x)|_POW2_BELOW16((x)>>16))
487 #define _POW2_BELOW64(x) (_POW2_BELOW32(x)|_POW2_BELOW32((x)>>32))
488 #define POW2_BELOW32(x) ((_POW2_BELOW32(x)>>1) + 1)
489 #define POW2_BELOW64(x) ((_POW2_BELOW64(x)>>1) + 1)
490
491 #define CREDITS_PER_JIFFY POW2_BELOW64(MAX_CPJ)
492 #define CREDITS_PER_JIFFY_v1 POW2_BELOW32(MAX_CPJ_v1)
493
494 /* in byte mode, the lowest possible rate is one packet/second.
495  * credit_cap is used as a counter that tells us how many times we can
496  * refill the "credits available" counter when it becomes empty.
497  */
498 #define MAX_CPJ_BYTES (0xFFFFFFFF / HZ)
499 #define CREDITS_PER_JIFFY_BYTES POW2_BELOW32(MAX_CPJ_BYTES)
500
501 static u32 xt_hashlimit_len_to_chunks(u32 len)
502 {
503         return (len >> XT_HASHLIMIT_BYTE_SHIFT) + 1;
504 }
505
506 /* Precision saver. */
507 static u64 user2credits(u64 user, int revision)
508 {
509         u64 scale = (revision == 1) ?
510                 XT_HASHLIMIT_SCALE : XT_HASHLIMIT_SCALE_v2;
511         u64 cpj = (revision == 1) ?
512                 CREDITS_PER_JIFFY_v1 : CREDITS_PER_JIFFY;
513
514         /* Avoid overflow: divide the constant operands first */
515         if (scale >= HZ * cpj)
516                 return div64_u64(user, div64_u64(scale, HZ * cpj));
517
518         return user * div64_u64(HZ * cpj, scale);
519 }
520
521 static u32 user2credits_byte(u32 user)
522 {
523         u64 us = user;
524         us *= HZ * CREDITS_PER_JIFFY_BYTES;
525         return (u32) (us >> 32);
526 }
527
528 static u64 user2rate(u64 user)
529 {
530         if (user != 0) {
531                 return div64_u64(XT_HASHLIMIT_SCALE_v2, user);
532         } else {
533                 pr_info_ratelimited("invalid rate from userspace: %llu\n",
534                                     user);
535                 return 0;
536         }
537 }
538
539 static u64 user2rate_bytes(u32 user)
540 {
541         u64 r;
542
543         r = user ? U32_MAX / user : U32_MAX;
544         return (r - 1) << XT_HASHLIMIT_BYTE_SHIFT;
545 }
546
547 static void rateinfo_recalc(struct dsthash_ent *dh, unsigned long now,
548                             u32 mode, int revision)
549 {
550         unsigned long delta = now - dh->rateinfo.prev;
551         u64 cap, cpj;
552
553         if (delta == 0)
554                 return;
555
556         if (revision >= 3 && mode & XT_HASHLIMIT_RATE_MATCH) {
557                 u64 interval = dh->rateinfo.interval * HZ;
558
559                 if (delta < interval)
560                         return;
561
562                 dh->rateinfo.prev = now;
563                 dh->rateinfo.prev_window =
564                         ((dh->rateinfo.current_rate * interval) >
565                          (delta * dh->rateinfo.rate));
566                 dh->rateinfo.current_rate = 0;
567
568                 return;
569         }
570
571         dh->rateinfo.prev = now;
572
573         if (mode & XT_HASHLIMIT_BYTES) {
574                 u64 tmp = dh->rateinfo.credit;
575                 dh->rateinfo.credit += CREDITS_PER_JIFFY_BYTES * delta;
576                 cap = CREDITS_PER_JIFFY_BYTES * HZ;
577                 if (tmp >= dh->rateinfo.credit) {/* overflow */
578                         dh->rateinfo.credit = cap;
579                         return;
580                 }
581         } else {
582                 cpj = (revision == 1) ?
583                         CREDITS_PER_JIFFY_v1 : CREDITS_PER_JIFFY;
584                 dh->rateinfo.credit += delta * cpj;
585                 cap = dh->rateinfo.credit_cap;
586         }
587         if (dh->rateinfo.credit > cap)
588                 dh->rateinfo.credit = cap;
589 }
590
591 static void rateinfo_init(struct dsthash_ent *dh,
592                           struct xt_hashlimit_htable *hinfo, int revision)
593 {
594         dh->rateinfo.prev = jiffies;
595         if (revision >= 3 && hinfo->cfg.mode & XT_HASHLIMIT_RATE_MATCH) {
596                 dh->rateinfo.prev_window = 0;
597                 dh->rateinfo.current_rate = 0;
598                 if (hinfo->cfg.mode & XT_HASHLIMIT_BYTES) {
599                         dh->rateinfo.rate =
600                                 user2rate_bytes((u32)hinfo->cfg.avg);
601                         if (hinfo->cfg.burst)
602                                 dh->rateinfo.burst =
603                                         hinfo->cfg.burst * dh->rateinfo.rate;
604                         else
605                                 dh->rateinfo.burst = dh->rateinfo.rate;
606                 } else {
607                         dh->rateinfo.rate = user2rate(hinfo->cfg.avg);
608                         dh->rateinfo.burst =
609                                 hinfo->cfg.burst + dh->rateinfo.rate;
610                 }
611                 dh->rateinfo.interval = hinfo->cfg.interval;
612         } else if (hinfo->cfg.mode & XT_HASHLIMIT_BYTES) {
613                 dh->rateinfo.credit = CREDITS_PER_JIFFY_BYTES * HZ;
614                 dh->rateinfo.cost = user2credits_byte(hinfo->cfg.avg);
615                 dh->rateinfo.credit_cap = hinfo->cfg.burst;
616         } else {
617                 dh->rateinfo.credit = user2credits(hinfo->cfg.avg *
618                                                    hinfo->cfg.burst, revision);
619                 dh->rateinfo.cost = user2credits(hinfo->cfg.avg, revision);
620                 dh->rateinfo.credit_cap = dh->rateinfo.credit;
621         }
622 }
623
624 static inline __be32 maskl(__be32 a, unsigned int l)
625 {
626         return l ? htonl(ntohl(a) & ~0 << (32 - l)) : 0;
627 }
628
629 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
630 static void hashlimit_ipv6_mask(__be32 *i, unsigned int p)
631 {
632         switch (p) {
633         case 0 ... 31:
634                 i[0] = maskl(i[0], p);
635                 i[1] = i[2] = i[3] = 0;
636                 break;
637         case 32 ... 63:
638                 i[1] = maskl(i[1], p - 32);
639                 i[2] = i[3] = 0;
640                 break;
641         case 64 ... 95:
642                 i[2] = maskl(i[2], p - 64);
643                 i[3] = 0;
644                 break;
645         case 96 ... 127:
646                 i[3] = maskl(i[3], p - 96);
647                 break;
648         case 128:
649                 break;
650         }
651 }
652 #endif
653
654 static int
655 hashlimit_init_dst(const struct xt_hashlimit_htable *hinfo,
656                    struct dsthash_dst *dst,
657                    const struct sk_buff *skb, unsigned int protoff)
658 {
659         __be16 _ports[2], *ports;
660         u8 nexthdr;
661         int poff;
662
663         memset(dst, 0, sizeof(*dst));
664
665         switch (hinfo->family) {
666         case NFPROTO_IPV4:
667                 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP)
668                         dst->ip.dst = maskl(ip_hdr(skb)->daddr,
669                                       hinfo->cfg.dstmask);
670                 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_SIP)
671                         dst->ip.src = maskl(ip_hdr(skb)->saddr,
672                                       hinfo->cfg.srcmask);
673
674                 if (!(hinfo->cfg.mode &
675                       (XT_HASHLIMIT_HASH_DPT | XT_HASHLIMIT_HASH_SPT)))
676                         return 0;
677                 nexthdr = ip_hdr(skb)->protocol;
678                 break;
679 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
680         case NFPROTO_IPV6:
681         {
682                 __be16 frag_off;
683
684                 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DIP) {
685                         memcpy(&dst->ip6.dst, &ipv6_hdr(skb)->daddr,
686                                sizeof(dst->ip6.dst));
687                         hashlimit_ipv6_mask(dst->ip6.dst, hinfo->cfg.dstmask);
688                 }
689                 if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_SIP) {
690                         memcpy(&dst->ip6.src, &ipv6_hdr(skb)->saddr,
691                                sizeof(dst->ip6.src));
692                         hashlimit_ipv6_mask(dst->ip6.src, hinfo->cfg.srcmask);
693                 }
694
695                 if (!(hinfo->cfg.mode &
696                       (XT_HASHLIMIT_HASH_DPT | XT_HASHLIMIT_HASH_SPT)))
697                         return 0;
698                 nexthdr = ipv6_hdr(skb)->nexthdr;
699                 protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr, &frag_off);
700                 if ((int)protoff < 0)
701                         return -1;
702                 break;
703         }
704 #endif
705         default:
706                 BUG();
707                 return 0;
708         }
709
710         poff = proto_ports_offset(nexthdr);
711         if (poff >= 0) {
712                 ports = skb_header_pointer(skb, protoff + poff, sizeof(_ports),
713                                            &_ports);
714         } else {
715                 _ports[0] = _ports[1] = 0;
716                 ports = _ports;
717         }
718         if (!ports)
719                 return -1;
720         if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_SPT)
721                 dst->src_port = ports[0];
722         if (hinfo->cfg.mode & XT_HASHLIMIT_HASH_DPT)
723                 dst->dst_port = ports[1];
724         return 0;
725 }
726
727 static u32 hashlimit_byte_cost(unsigned int len, struct dsthash_ent *dh)
728 {
729         u64 tmp = xt_hashlimit_len_to_chunks(len);
730         tmp = tmp * dh->rateinfo.cost;
731
732         if (unlikely(tmp > CREDITS_PER_JIFFY_BYTES * HZ))
733                 tmp = CREDITS_PER_JIFFY_BYTES * HZ;
734
735         if (dh->rateinfo.credit < tmp && dh->rateinfo.credit_cap) {
736                 dh->rateinfo.credit_cap--;
737                 dh->rateinfo.credit = CREDITS_PER_JIFFY_BYTES * HZ;
738         }
739         return (u32) tmp;
740 }
741
742 static bool
743 hashlimit_mt_common(const struct sk_buff *skb, struct xt_action_param *par,
744                     struct xt_hashlimit_htable *hinfo,
745                     const struct hashlimit_cfg3 *cfg, int revision)
746 {
747         unsigned long now = jiffies;
748         struct dsthash_ent *dh;
749         struct dsthash_dst dst;
750         bool race = false;
751         u64 cost;
752
753         if (hashlimit_init_dst(hinfo, &dst, skb, par->thoff) < 0)
754                 goto hotdrop;
755
756         local_bh_disable();
757         dh = dsthash_find(hinfo, &dst);
758         if (dh == NULL) {
759                 dh = dsthash_alloc_init(hinfo, &dst, &race);
760                 if (dh == NULL) {
761                         local_bh_enable();
762                         goto hotdrop;
763                 } else if (race) {
764                         /* Already got an entry, update expiration timeout */
765                         dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire);
766                         rateinfo_recalc(dh, now, hinfo->cfg.mode, revision);
767                 } else {
768                         dh->expires = jiffies + msecs_to_jiffies(hinfo->cfg.expire);
769                         rateinfo_init(dh, hinfo, revision);
770                 }
771         } else {
772                 /* update expiration timeout */
773                 dh->expires = now + msecs_to_jiffies(hinfo->cfg.expire);
774                 rateinfo_recalc(dh, now, hinfo->cfg.mode, revision);
775         }
776
777         if (cfg->mode & XT_HASHLIMIT_RATE_MATCH) {
778                 cost = (cfg->mode & XT_HASHLIMIT_BYTES) ? skb->len : 1;
779                 dh->rateinfo.current_rate += cost;
780
781                 if (!dh->rateinfo.prev_window &&
782                     (dh->rateinfo.current_rate <= dh->rateinfo.burst)) {
783                         spin_unlock(&dh->lock);
784                         local_bh_enable();
785                         return !(cfg->mode & XT_HASHLIMIT_INVERT);
786                 } else {
787                         goto overlimit;
788                 }
789         }
790
791         if (cfg->mode & XT_HASHLIMIT_BYTES)
792                 cost = hashlimit_byte_cost(skb->len, dh);
793         else
794                 cost = dh->rateinfo.cost;
795
796         if (dh->rateinfo.credit >= cost) {
797                 /* below the limit */
798                 dh->rateinfo.credit -= cost;
799                 spin_unlock(&dh->lock);
800                 local_bh_enable();
801                 return !(cfg->mode & XT_HASHLIMIT_INVERT);
802         }
803
804 overlimit:
805         spin_unlock(&dh->lock);
806         local_bh_enable();
807         /* default match is underlimit - so over the limit, we need to invert */
808         return cfg->mode & XT_HASHLIMIT_INVERT;
809
810  hotdrop:
811         par->hotdrop = true;
812         return false;
813 }
814
815 static bool
816 hashlimit_mt_v1(const struct sk_buff *skb, struct xt_action_param *par)
817 {
818         const struct xt_hashlimit_mtinfo1 *info = par->matchinfo;
819         struct xt_hashlimit_htable *hinfo = info->hinfo;
820         struct hashlimit_cfg3 cfg = {};
821         int ret;
822
823         ret = cfg_copy(&cfg, (void *)&info->cfg, 1);
824         if (ret)
825                 return ret;
826
827         return hashlimit_mt_common(skb, par, hinfo, &cfg, 1);
828 }
829
830 static bool
831 hashlimit_mt_v2(const struct sk_buff *skb, struct xt_action_param *par)
832 {
833         const struct xt_hashlimit_mtinfo2 *info = par->matchinfo;
834         struct xt_hashlimit_htable *hinfo = info->hinfo;
835         struct hashlimit_cfg3 cfg = {};
836         int ret;
837
838         ret = cfg_copy(&cfg, (void *)&info->cfg, 2);
839         if (ret)
840                 return ret;
841
842         return hashlimit_mt_common(skb, par, hinfo, &cfg, 2);
843 }
844
845 static bool
846 hashlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
847 {
848         const struct xt_hashlimit_mtinfo3 *info = par->matchinfo;
849         struct xt_hashlimit_htable *hinfo = info->hinfo;
850
851         return hashlimit_mt_common(skb, par, hinfo, &info->cfg, 3);
852 }
853
854 static int hashlimit_mt_check_common(const struct xt_mtchk_param *par,
855                                      struct xt_hashlimit_htable **hinfo,
856                                      struct hashlimit_cfg3 *cfg,
857                                      const char *name, int revision)
858 {
859         struct net *net = par->net;
860         int ret;
861
862         if (cfg->gc_interval == 0 || cfg->expire == 0)
863                 return -EINVAL;
864         if (par->family == NFPROTO_IPV4) {
865                 if (cfg->srcmask > 32 || cfg->dstmask > 32)
866                         return -EINVAL;
867         } else {
868                 if (cfg->srcmask > 128 || cfg->dstmask > 128)
869                         return -EINVAL;
870         }
871
872         if (cfg->mode & ~XT_HASHLIMIT_ALL) {
873                 pr_info_ratelimited("Unknown mode mask %X, kernel too old?\n",
874                                     cfg->mode);
875                 return -EINVAL;
876         }
877
878         /* Check for overflow. */
879         if (revision >= 3 && cfg->mode & XT_HASHLIMIT_RATE_MATCH) {
880                 if (cfg->avg == 0 || cfg->avg > U32_MAX) {
881                         pr_info_ratelimited("invalid rate\n");
882                         return -ERANGE;
883                 }
884
885                 if (cfg->interval == 0) {
886                         pr_info_ratelimited("invalid interval\n");
887                         return -EINVAL;
888                 }
889         } else if (cfg->mode & XT_HASHLIMIT_BYTES) {
890                 if (user2credits_byte(cfg->avg) == 0) {
891                         pr_info_ratelimited("overflow, rate too high: %llu\n",
892                                             cfg->avg);
893                         return -EINVAL;
894                 }
895         } else if (cfg->burst == 0 ||
896                    user2credits(cfg->avg * cfg->burst, revision) <
897                    user2credits(cfg->avg, revision)) {
898                 pr_info_ratelimited("overflow, try lower: %llu/%llu\n",
899                                     cfg->avg, cfg->burst);
900                 return -ERANGE;
901         }
902
903         mutex_lock(&hashlimit_mutex);
904         *hinfo = htable_find_get(net, name, par->family);
905         if (*hinfo == NULL) {
906                 ret = htable_create(net, cfg, name, par->family,
907                                     hinfo, revision);
908                 if (ret < 0) {
909                         mutex_unlock(&hashlimit_mutex);
910                         return ret;
911                 }
912         }
913         mutex_unlock(&hashlimit_mutex);
914
915         return 0;
916 }
917
918 static int hashlimit_mt_check_v1(const struct xt_mtchk_param *par)
919 {
920         struct xt_hashlimit_mtinfo1 *info = par->matchinfo;
921         struct hashlimit_cfg3 cfg = {};
922         int ret;
923
924         ret = xt_check_proc_name(info->name, sizeof(info->name));
925         if (ret)
926                 return ret;
927
928         ret = cfg_copy(&cfg, (void *)&info->cfg, 1);
929         if (ret)
930                 return ret;
931
932         return hashlimit_mt_check_common(par, &info->hinfo,
933                                          &cfg, info->name, 1);
934 }
935
936 static int hashlimit_mt_check_v2(const struct xt_mtchk_param *par)
937 {
938         struct xt_hashlimit_mtinfo2 *info = par->matchinfo;
939         struct hashlimit_cfg3 cfg = {};
940         int ret;
941
942         ret = xt_check_proc_name(info->name, sizeof(info->name));
943         if (ret)
944                 return ret;
945
946         ret = cfg_copy(&cfg, (void *)&info->cfg, 2);
947         if (ret)
948                 return ret;
949
950         return hashlimit_mt_check_common(par, &info->hinfo,
951                                          &cfg, info->name, 2);
952 }
953
954 static int hashlimit_mt_check(const struct xt_mtchk_param *par)
955 {
956         struct xt_hashlimit_mtinfo3 *info = par->matchinfo;
957         int ret;
958
959         ret = xt_check_proc_name(info->name, sizeof(info->name));
960         if (ret)
961                 return ret;
962
963         return hashlimit_mt_check_common(par, &info->hinfo, &info->cfg,
964                                          info->name, 3);
965 }
966
967 static void hashlimit_mt_destroy_v2(const struct xt_mtdtor_param *par)
968 {
969         const struct xt_hashlimit_mtinfo2 *info = par->matchinfo;
970
971         htable_put(info->hinfo);
972 }
973
974 static void hashlimit_mt_destroy_v1(const struct xt_mtdtor_param *par)
975 {
976         const struct xt_hashlimit_mtinfo1 *info = par->matchinfo;
977
978         htable_put(info->hinfo);
979 }
980
981 static void hashlimit_mt_destroy(const struct xt_mtdtor_param *par)
982 {
983         const struct xt_hashlimit_mtinfo3 *info = par->matchinfo;
984
985         htable_put(info->hinfo);
986 }
987
988 static struct xt_match hashlimit_mt_reg[] __read_mostly = {
989         {
990                 .name           = "hashlimit",
991                 .revision       = 1,
992                 .family         = NFPROTO_IPV4,
993                 .match          = hashlimit_mt_v1,
994                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo1),
995                 .usersize       = offsetof(struct xt_hashlimit_mtinfo1, hinfo),
996                 .checkentry     = hashlimit_mt_check_v1,
997                 .destroy        = hashlimit_mt_destroy_v1,
998                 .me             = THIS_MODULE,
999         },
1000         {
1001                 .name           = "hashlimit",
1002                 .revision       = 2,
1003                 .family         = NFPROTO_IPV4,
1004                 .match          = hashlimit_mt_v2,
1005                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo2),
1006                 .usersize       = offsetof(struct xt_hashlimit_mtinfo2, hinfo),
1007                 .checkentry     = hashlimit_mt_check_v2,
1008                 .destroy        = hashlimit_mt_destroy_v2,
1009                 .me             = THIS_MODULE,
1010         },
1011         {
1012                 .name           = "hashlimit",
1013                 .revision       = 3,
1014                 .family         = NFPROTO_IPV4,
1015                 .match          = hashlimit_mt,
1016                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo3),
1017                 .usersize       = offsetof(struct xt_hashlimit_mtinfo3, hinfo),
1018                 .checkentry     = hashlimit_mt_check,
1019                 .destroy        = hashlimit_mt_destroy,
1020                 .me             = THIS_MODULE,
1021         },
1022 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
1023         {
1024                 .name           = "hashlimit",
1025                 .revision       = 1,
1026                 .family         = NFPROTO_IPV6,
1027                 .match          = hashlimit_mt_v1,
1028                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo1),
1029                 .usersize       = offsetof(struct xt_hashlimit_mtinfo1, hinfo),
1030                 .checkentry     = hashlimit_mt_check_v1,
1031                 .destroy        = hashlimit_mt_destroy_v1,
1032                 .me             = THIS_MODULE,
1033         },
1034         {
1035                 .name           = "hashlimit",
1036                 .revision       = 2,
1037                 .family         = NFPROTO_IPV6,
1038                 .match          = hashlimit_mt_v2,
1039                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo2),
1040                 .usersize       = offsetof(struct xt_hashlimit_mtinfo2, hinfo),
1041                 .checkentry     = hashlimit_mt_check_v2,
1042                 .destroy        = hashlimit_mt_destroy_v2,
1043                 .me             = THIS_MODULE,
1044         },
1045         {
1046                 .name           = "hashlimit",
1047                 .revision       = 3,
1048                 .family         = NFPROTO_IPV6,
1049                 .match          = hashlimit_mt,
1050                 .matchsize      = sizeof(struct xt_hashlimit_mtinfo3),
1051                 .usersize       = offsetof(struct xt_hashlimit_mtinfo3, hinfo),
1052                 .checkentry     = hashlimit_mt_check,
1053                 .destroy        = hashlimit_mt_destroy,
1054                 .me             = THIS_MODULE,
1055         },
1056 #endif
1057 };
1058
1059 /* PROC stuff */
1060 static void *dl_seq_start(struct seq_file *s, loff_t *pos)
1061         __acquires(htable->lock)
1062 {
1063         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1064         unsigned int *bucket;
1065
1066         spin_lock_bh(&htable->lock);
1067         if (*pos >= htable->cfg.size)
1068                 return NULL;
1069
1070         bucket = kmalloc(sizeof(unsigned int), GFP_ATOMIC);
1071         if (!bucket)
1072                 return ERR_PTR(-ENOMEM);
1073
1074         *bucket = *pos;
1075         return bucket;
1076 }
1077
1078 static void *dl_seq_next(struct seq_file *s, void *v, loff_t *pos)
1079 {
1080         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1081         unsigned int *bucket = v;
1082
1083         *pos = ++(*bucket);
1084         if (*pos >= htable->cfg.size) {
1085                 kfree(v);
1086                 return NULL;
1087         }
1088         return bucket;
1089 }
1090
1091 static void dl_seq_stop(struct seq_file *s, void *v)
1092         __releases(htable->lock)
1093 {
1094         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1095         unsigned int *bucket = v;
1096
1097         if (!IS_ERR(bucket))
1098                 kfree(bucket);
1099         spin_unlock_bh(&htable->lock);
1100 }
1101
1102 static void dl_seq_print(struct dsthash_ent *ent, u_int8_t family,
1103                          struct seq_file *s)
1104 {
1105         switch (family) {
1106         case NFPROTO_IPV4:
1107                 seq_printf(s, "%ld %pI4:%u->%pI4:%u %llu %llu %llu\n",
1108                            (long)(ent->expires - jiffies)/HZ,
1109                            &ent->dst.ip.src,
1110                            ntohs(ent->dst.src_port),
1111                            &ent->dst.ip.dst,
1112                            ntohs(ent->dst.dst_port),
1113                            ent->rateinfo.credit, ent->rateinfo.credit_cap,
1114                            ent->rateinfo.cost);
1115                 break;
1116 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
1117         case NFPROTO_IPV6:
1118                 seq_printf(s, "%ld %pI6:%u->%pI6:%u %llu %llu %llu\n",
1119                            (long)(ent->expires - jiffies)/HZ,
1120                            &ent->dst.ip6.src,
1121                            ntohs(ent->dst.src_port),
1122                            &ent->dst.ip6.dst,
1123                            ntohs(ent->dst.dst_port),
1124                            ent->rateinfo.credit, ent->rateinfo.credit_cap,
1125                            ent->rateinfo.cost);
1126                 break;
1127 #endif
1128         default:
1129                 BUG();
1130         }
1131 }
1132
1133 static int dl_seq_real_show_v2(struct dsthash_ent *ent, u_int8_t family,
1134                                struct seq_file *s)
1135 {
1136         struct xt_hashlimit_htable *ht = PDE_DATA(file_inode(s->file));
1137
1138         spin_lock(&ent->lock);
1139         /* recalculate to show accurate numbers */
1140         rateinfo_recalc(ent, jiffies, ht->cfg.mode, 2);
1141
1142         dl_seq_print(ent, family, s);
1143
1144         spin_unlock(&ent->lock);
1145         return seq_has_overflowed(s);
1146 }
1147
1148 static int dl_seq_real_show_v1(struct dsthash_ent *ent, u_int8_t family,
1149                                struct seq_file *s)
1150 {
1151         struct xt_hashlimit_htable *ht = PDE_DATA(file_inode(s->file));
1152
1153         spin_lock(&ent->lock);
1154         /* recalculate to show accurate numbers */
1155         rateinfo_recalc(ent, jiffies, ht->cfg.mode, 1);
1156
1157         dl_seq_print(ent, family, s);
1158
1159         spin_unlock(&ent->lock);
1160         return seq_has_overflowed(s);
1161 }
1162
1163 static int dl_seq_real_show(struct dsthash_ent *ent, u_int8_t family,
1164                             struct seq_file *s)
1165 {
1166         struct xt_hashlimit_htable *ht = PDE_DATA(file_inode(s->file));
1167
1168         spin_lock(&ent->lock);
1169         /* recalculate to show accurate numbers */
1170         rateinfo_recalc(ent, jiffies, ht->cfg.mode, 3);
1171
1172         dl_seq_print(ent, family, s);
1173
1174         spin_unlock(&ent->lock);
1175         return seq_has_overflowed(s);
1176 }
1177
1178 static int dl_seq_show_v2(struct seq_file *s, void *v)
1179 {
1180         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1181         unsigned int *bucket = (unsigned int *)v;
1182         struct dsthash_ent *ent;
1183
1184         if (!hlist_empty(&htable->hash[*bucket])) {
1185                 hlist_for_each_entry(ent, &htable->hash[*bucket], node)
1186                         if (dl_seq_real_show_v2(ent, htable->family, s))
1187                                 return -1;
1188         }
1189         return 0;
1190 }
1191
1192 static int dl_seq_show_v1(struct seq_file *s, void *v)
1193 {
1194         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1195         unsigned int *bucket = v;
1196         struct dsthash_ent *ent;
1197
1198         if (!hlist_empty(&htable->hash[*bucket])) {
1199                 hlist_for_each_entry(ent, &htable->hash[*bucket], node)
1200                         if (dl_seq_real_show_v1(ent, htable->family, s))
1201                                 return -1;
1202         }
1203         return 0;
1204 }
1205
1206 static int dl_seq_show(struct seq_file *s, void *v)
1207 {
1208         struct xt_hashlimit_htable *htable = PDE_DATA(file_inode(s->file));
1209         unsigned int *bucket = v;
1210         struct dsthash_ent *ent;
1211
1212         if (!hlist_empty(&htable->hash[*bucket])) {
1213                 hlist_for_each_entry(ent, &htable->hash[*bucket], node)
1214                         if (dl_seq_real_show(ent, htable->family, s))
1215                                 return -1;
1216         }
1217         return 0;
1218 }
1219
1220 static const struct seq_operations dl_seq_ops_v1 = {
1221         .start = dl_seq_start,
1222         .next  = dl_seq_next,
1223         .stop  = dl_seq_stop,
1224         .show  = dl_seq_show_v1
1225 };
1226
1227 static const struct seq_operations dl_seq_ops_v2 = {
1228         .start = dl_seq_start,
1229         .next  = dl_seq_next,
1230         .stop  = dl_seq_stop,
1231         .show  = dl_seq_show_v2
1232 };
1233
1234 static const struct seq_operations dl_seq_ops = {
1235         .start = dl_seq_start,
1236         .next  = dl_seq_next,
1237         .stop  = dl_seq_stop,
1238         .show  = dl_seq_show
1239 };
1240
1241 static int __net_init hashlimit_proc_net_init(struct net *net)
1242 {
1243         struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
1244
1245         hashlimit_net->ipt_hashlimit = proc_mkdir("ipt_hashlimit", net->proc_net);
1246         if (!hashlimit_net->ipt_hashlimit)
1247                 return -ENOMEM;
1248 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
1249         hashlimit_net->ip6t_hashlimit = proc_mkdir("ip6t_hashlimit", net->proc_net);
1250         if (!hashlimit_net->ip6t_hashlimit) {
1251                 remove_proc_entry("ipt_hashlimit", net->proc_net);
1252                 return -ENOMEM;
1253         }
1254 #endif
1255         return 0;
1256 }
1257
1258 static void __net_exit hashlimit_proc_net_exit(struct net *net)
1259 {
1260         struct xt_hashlimit_htable *hinfo;
1261         struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
1262
1263         /* hashlimit_net_exit() is called before hashlimit_mt_destroy().
1264          * Make sure that the parent ipt_hashlimit and ip6t_hashlimit proc
1265          * entries is empty before trying to remove it.
1266          */
1267         mutex_lock(&hashlimit_mutex);
1268         hlist_for_each_entry(hinfo, &hashlimit_net->htables, node)
1269                 htable_remove_proc_entry(hinfo);
1270         hashlimit_net->ipt_hashlimit = NULL;
1271         hashlimit_net->ip6t_hashlimit = NULL;
1272         mutex_unlock(&hashlimit_mutex);
1273
1274         remove_proc_entry("ipt_hashlimit", net->proc_net);
1275 #if IS_ENABLED(CONFIG_IP6_NF_IPTABLES)
1276         remove_proc_entry("ip6t_hashlimit", net->proc_net);
1277 #endif
1278 }
1279
1280 static int __net_init hashlimit_net_init(struct net *net)
1281 {
1282         struct hashlimit_net *hashlimit_net = hashlimit_pernet(net);
1283
1284         INIT_HLIST_HEAD(&hashlimit_net->htables);
1285         return hashlimit_proc_net_init(net);
1286 }
1287
1288 static void __net_exit hashlimit_net_exit(struct net *net)
1289 {
1290         hashlimit_proc_net_exit(net);
1291 }
1292
1293 static struct pernet_operations hashlimit_net_ops = {
1294         .init   = hashlimit_net_init,
1295         .exit   = hashlimit_net_exit,
1296         .id     = &hashlimit_net_id,
1297         .size   = sizeof(struct hashlimit_net),
1298 };
1299
1300 static int __init hashlimit_mt_init(void)
1301 {
1302         int err;
1303
1304         err = register_pernet_subsys(&hashlimit_net_ops);
1305         if (err < 0)
1306                 return err;
1307         err = xt_register_matches(hashlimit_mt_reg,
1308               ARRAY_SIZE(hashlimit_mt_reg));
1309         if (err < 0)
1310                 goto err1;
1311
1312         err = -ENOMEM;
1313         hashlimit_cachep = kmem_cache_create("xt_hashlimit",
1314                                             sizeof(struct dsthash_ent), 0, 0,
1315                                             NULL);
1316         if (!hashlimit_cachep) {
1317                 pr_warn("unable to create slab cache\n");
1318                 goto err2;
1319         }
1320         return 0;
1321
1322 err2:
1323         xt_unregister_matches(hashlimit_mt_reg, ARRAY_SIZE(hashlimit_mt_reg));
1324 err1:
1325         unregister_pernet_subsys(&hashlimit_net_ops);
1326         return err;
1327
1328 }
1329
1330 static void __exit hashlimit_mt_exit(void)
1331 {
1332         xt_unregister_matches(hashlimit_mt_reg, ARRAY_SIZE(hashlimit_mt_reg));
1333         unregister_pernet_subsys(&hashlimit_net_ops);
1334
1335         rcu_barrier();
1336         kmem_cache_destroy(hashlimit_cachep);
1337 }
1338
1339 module_init(hashlimit_mt_init);
1340 module_exit(hashlimit_mt_exit);