xref: /openbmc/linux/net/bridge/netfilter/ebtables.c (revision a8da474e)
1 /*
2  *  ebtables
3  *
4  *  Author:
5  *  Bart De Schuymer		<bdschuym@pandora.be>
6  *
7  *  ebtables.c,v 2.0, July, 2002
8  *
9  *  This code is strongly inspired by the iptables code which is
10  *  Copyright (C) 1999 Paul `Rusty' Russell & Michael J. Neuling
11  *
12  *  This program is free software; you can redistribute it and/or
13  *  modify it under the terms of the GNU General Public License
14  *  as published by the Free Software Foundation; either version
15  *  2 of the License, or (at your option) any later version.
16  */
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18 #include <linux/kmod.h>
19 #include <linux/module.h>
20 #include <linux/vmalloc.h>
21 #include <linux/netfilter/x_tables.h>
22 #include <linux/netfilter_bridge/ebtables.h>
23 #include <linux/spinlock.h>
24 #include <linux/mutex.h>
25 #include <linux/slab.h>
26 #include <asm/uaccess.h>
27 #include <linux/smp.h>
28 #include <linux/cpumask.h>
29 #include <linux/audit.h>
30 #include <net/sock.h>
31 /* needed for logical [in,out]-dev filtering */
32 #include "../br_private.h"
33 
34 #define BUGPRINT(format, args...) printk("kernel msg: ebtables bug: please "\
35 					 "report to author: "format, ## args)
36 /* #define BUGPRINT(format, args...) */
37 
38 /*
39  * Each cpu has its own set of counters, so there is no need for write_lock in
40  * the softirq
41  * For reading or updating the counters, the user context needs to
42  * get a write_lock
43  */
44 
45 /* The size of each set of counters is altered to get cache alignment */
46 #define SMP_ALIGN(x) (((x) + SMP_CACHE_BYTES-1) & ~(SMP_CACHE_BYTES-1))
47 #define COUNTER_OFFSET(n) (SMP_ALIGN(n * sizeof(struct ebt_counter)))
48 #define COUNTER_BASE(c, n, cpu) ((struct ebt_counter *)(((char *)c) + \
49    COUNTER_OFFSET(n) * cpu))
50 
51 
52 
53 static DEFINE_MUTEX(ebt_mutex);
54 
55 #ifdef CONFIG_COMPAT
56 static void ebt_standard_compat_from_user(void *dst, const void *src)
57 {
58 	int v = *(compat_int_t *)src;
59 
60 	if (v >= 0)
61 		v += xt_compat_calc_jump(NFPROTO_BRIDGE, v);
62 	memcpy(dst, &v, sizeof(v));
63 }
64 
65 static int ebt_standard_compat_to_user(void __user *dst, const void *src)
66 {
67 	compat_int_t cv = *(int *)src;
68 
69 	if (cv >= 0)
70 		cv -= xt_compat_calc_jump(NFPROTO_BRIDGE, cv);
71 	return copy_to_user(dst, &cv, sizeof(cv)) ? -EFAULT : 0;
72 }
73 #endif
74 
75 
76 static struct xt_target ebt_standard_target = {
77 	.name       = "standard",
78 	.revision   = 0,
79 	.family     = NFPROTO_BRIDGE,
80 	.targetsize = sizeof(int),
81 #ifdef CONFIG_COMPAT
82 	.compatsize = sizeof(compat_int_t),
83 	.compat_from_user = ebt_standard_compat_from_user,
84 	.compat_to_user =  ebt_standard_compat_to_user,
85 #endif
86 };
87 
88 static inline int
89 ebt_do_watcher(const struct ebt_entry_watcher *w, struct sk_buff *skb,
90 	       struct xt_action_param *par)
91 {
92 	par->target   = w->u.watcher;
93 	par->targinfo = w->data;
94 	w->u.watcher->target(skb, par);
95 	/* watchers don't give a verdict */
96 	return 0;
97 }
98 
99 static inline int
100 ebt_do_match(struct ebt_entry_match *m, const struct sk_buff *skb,
101 	     struct xt_action_param *par)
102 {
103 	par->match     = m->u.match;
104 	par->matchinfo = m->data;
105 	return m->u.match->match(skb, par) ? EBT_MATCH : EBT_NOMATCH;
106 }
107 
108 static inline int
109 ebt_dev_check(const char *entry, const struct net_device *device)
110 {
111 	int i = 0;
112 	const char *devname;
113 
114 	if (*entry == '\0')
115 		return 0;
116 	if (!device)
117 		return 1;
118 	devname = device->name;
119 	/* 1 is the wildcard token */
120 	while (entry[i] != '\0' && entry[i] != 1 && entry[i] == devname[i])
121 		i++;
122 	return devname[i] != entry[i] && entry[i] != 1;
123 }
124 
125 #define FWINV2(bool, invflg) ((bool) ^ !!(e->invflags & invflg))
126 /* process standard matches */
127 static inline int
128 ebt_basic_match(const struct ebt_entry *e, const struct sk_buff *skb,
129                 const struct net_device *in, const struct net_device *out)
130 {
131 	const struct ethhdr *h = eth_hdr(skb);
132 	const struct net_bridge_port *p;
133 	__be16 ethproto;
134 	int verdict, i;
135 
136 	if (skb_vlan_tag_present(skb))
137 		ethproto = htons(ETH_P_8021Q);
138 	else
139 		ethproto = h->h_proto;
140 
141 	if (e->bitmask & EBT_802_3) {
142 		if (FWINV2(eth_proto_is_802_3(ethproto), EBT_IPROTO))
143 			return 1;
144 	} else if (!(e->bitmask & EBT_NOPROTO) &&
145 	   FWINV2(e->ethproto != ethproto, EBT_IPROTO))
146 		return 1;
147 
148 	if (FWINV2(ebt_dev_check(e->in, in), EBT_IIN))
149 		return 1;
150 	if (FWINV2(ebt_dev_check(e->out, out), EBT_IOUT))
151 		return 1;
152 	/* rcu_read_lock()ed by nf_hook_slow */
153 	if (in && (p = br_port_get_rcu(in)) != NULL &&
154 	    FWINV2(ebt_dev_check(e->logical_in, p->br->dev), EBT_ILOGICALIN))
155 		return 1;
156 	if (out && (p = br_port_get_rcu(out)) != NULL &&
157 	    FWINV2(ebt_dev_check(e->logical_out, p->br->dev), EBT_ILOGICALOUT))
158 		return 1;
159 
160 	if (e->bitmask & EBT_SOURCEMAC) {
161 		verdict = 0;
162 		for (i = 0; i < 6; i++)
163 			verdict |= (h->h_source[i] ^ e->sourcemac[i]) &
164 			   e->sourcemsk[i];
165 		if (FWINV2(verdict != 0, EBT_ISOURCE) )
166 			return 1;
167 	}
168 	if (e->bitmask & EBT_DESTMAC) {
169 		verdict = 0;
170 		for (i = 0; i < 6; i++)
171 			verdict |= (h->h_dest[i] ^ e->destmac[i]) &
172 			   e->destmsk[i];
173 		if (FWINV2(verdict != 0, EBT_IDEST) )
174 			return 1;
175 	}
176 	return 0;
177 }
178 
179 static inline
180 struct ebt_entry *ebt_next_entry(const struct ebt_entry *entry)
181 {
182 	return (void *)entry + entry->next_offset;
183 }
184 
185 /* Do some firewalling */
186 unsigned int ebt_do_table(struct sk_buff *skb,
187 			  const struct nf_hook_state *state,
188 			  struct ebt_table *table)
189 {
190 	unsigned int hook = state->hook;
191 	int i, nentries;
192 	struct ebt_entry *point;
193 	struct ebt_counter *counter_base, *cb_base;
194 	const struct ebt_entry_target *t;
195 	int verdict, sp = 0;
196 	struct ebt_chainstack *cs;
197 	struct ebt_entries *chaininfo;
198 	const char *base;
199 	const struct ebt_table_info *private;
200 	struct xt_action_param acpar;
201 
202 	acpar.family  = NFPROTO_BRIDGE;
203 	acpar.net     = state->net;
204 	acpar.in      = state->in;
205 	acpar.out     = state->out;
206 	acpar.hotdrop = false;
207 	acpar.hooknum = hook;
208 
209 	read_lock_bh(&table->lock);
210 	private = table->private;
211 	cb_base = COUNTER_BASE(private->counters, private->nentries,
212 	   smp_processor_id());
213 	if (private->chainstack)
214 		cs = private->chainstack[smp_processor_id()];
215 	else
216 		cs = NULL;
217 	chaininfo = private->hook_entry[hook];
218 	nentries = private->hook_entry[hook]->nentries;
219 	point = (struct ebt_entry *)(private->hook_entry[hook]->data);
220 	counter_base = cb_base + private->hook_entry[hook]->counter_offset;
221 	/* base for chain jumps */
222 	base = private->entries;
223 	i = 0;
224 	while (i < nentries) {
225 		if (ebt_basic_match(point, skb, state->in, state->out))
226 			goto letscontinue;
227 
228 		if (EBT_MATCH_ITERATE(point, ebt_do_match, skb, &acpar) != 0)
229 			goto letscontinue;
230 		if (acpar.hotdrop) {
231 			read_unlock_bh(&table->lock);
232 			return NF_DROP;
233 		}
234 
235 		/* increase counter */
236 		(*(counter_base + i)).pcnt++;
237 		(*(counter_base + i)).bcnt += skb->len;
238 
239 		/* these should only watch: not modify, nor tell us
240 		   what to do with the packet */
241 		EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, &acpar);
242 
243 		t = (struct ebt_entry_target *)
244 		   (((char *)point) + point->target_offset);
245 		/* standard target */
246 		if (!t->u.target->target)
247 			verdict = ((struct ebt_standard_target *)t)->verdict;
248 		else {
249 			acpar.target   = t->u.target;
250 			acpar.targinfo = t->data;
251 			verdict = t->u.target->target(skb, &acpar);
252 		}
253 		if (verdict == EBT_ACCEPT) {
254 			read_unlock_bh(&table->lock);
255 			return NF_ACCEPT;
256 		}
257 		if (verdict == EBT_DROP) {
258 			read_unlock_bh(&table->lock);
259 			return NF_DROP;
260 		}
261 		if (verdict == EBT_RETURN) {
262 letsreturn:
263 #ifdef CONFIG_NETFILTER_DEBUG
264 			if (sp == 0) {
265 				BUGPRINT("RETURN on base chain");
266 				/* act like this is EBT_CONTINUE */
267 				goto letscontinue;
268 			}
269 #endif
270 			sp--;
271 			/* put all the local variables right */
272 			i = cs[sp].n;
273 			chaininfo = cs[sp].chaininfo;
274 			nentries = chaininfo->nentries;
275 			point = cs[sp].e;
276 			counter_base = cb_base +
277 			   chaininfo->counter_offset;
278 			continue;
279 		}
280 		if (verdict == EBT_CONTINUE)
281 			goto letscontinue;
282 #ifdef CONFIG_NETFILTER_DEBUG
283 		if (verdict < 0) {
284 			BUGPRINT("bogus standard verdict\n");
285 			read_unlock_bh(&table->lock);
286 			return NF_DROP;
287 		}
288 #endif
289 		/* jump to a udc */
290 		cs[sp].n = i + 1;
291 		cs[sp].chaininfo = chaininfo;
292 		cs[sp].e = ebt_next_entry(point);
293 		i = 0;
294 		chaininfo = (struct ebt_entries *) (base + verdict);
295 #ifdef CONFIG_NETFILTER_DEBUG
296 		if (chaininfo->distinguisher) {
297 			BUGPRINT("jump to non-chain\n");
298 			read_unlock_bh(&table->lock);
299 			return NF_DROP;
300 		}
301 #endif
302 		nentries = chaininfo->nentries;
303 		point = (struct ebt_entry *)chaininfo->data;
304 		counter_base = cb_base + chaininfo->counter_offset;
305 		sp++;
306 		continue;
307 letscontinue:
308 		point = ebt_next_entry(point);
309 		i++;
310 	}
311 
312 	/* I actually like this :) */
313 	if (chaininfo->policy == EBT_RETURN)
314 		goto letsreturn;
315 	if (chaininfo->policy == EBT_ACCEPT) {
316 		read_unlock_bh(&table->lock);
317 		return NF_ACCEPT;
318 	}
319 	read_unlock_bh(&table->lock);
320 	return NF_DROP;
321 }
322 
323 /* If it succeeds, returns element and locks mutex */
324 static inline void *
325 find_inlist_lock_noload(struct list_head *head, const char *name, int *error,
326    struct mutex *mutex)
327 {
328 	struct {
329 		struct list_head list;
330 		char name[EBT_FUNCTION_MAXNAMELEN];
331 	} *e;
332 
333 	mutex_lock(mutex);
334 	list_for_each_entry(e, head, list) {
335 		if (strcmp(e->name, name) == 0)
336 			return e;
337 	}
338 	*error = -ENOENT;
339 	mutex_unlock(mutex);
340 	return NULL;
341 }
342 
343 static void *
344 find_inlist_lock(struct list_head *head, const char *name, const char *prefix,
345    int *error, struct mutex *mutex)
346 {
347 	return try_then_request_module(
348 			find_inlist_lock_noload(head, name, error, mutex),
349 			"%s%s", prefix, name);
350 }
351 
352 static inline struct ebt_table *
353 find_table_lock(struct net *net, const char *name, int *error,
354 		struct mutex *mutex)
355 {
356 	return find_inlist_lock(&net->xt.tables[NFPROTO_BRIDGE], name,
357 				"ebtable_", error, mutex);
358 }
359 
360 static inline int
361 ebt_check_match(struct ebt_entry_match *m, struct xt_mtchk_param *par,
362 		unsigned int *cnt)
363 {
364 	const struct ebt_entry *e = par->entryinfo;
365 	struct xt_match *match;
366 	size_t left = ((char *)e + e->watchers_offset) - (char *)m;
367 	int ret;
368 
369 	if (left < sizeof(struct ebt_entry_match) ||
370 	    left - sizeof(struct ebt_entry_match) < m->match_size)
371 		return -EINVAL;
372 
373 	match = xt_request_find_match(NFPROTO_BRIDGE, m->u.name, 0);
374 	if (IS_ERR(match))
375 		return PTR_ERR(match);
376 	m->u.match = match;
377 
378 	par->match     = match;
379 	par->matchinfo = m->data;
380 	ret = xt_check_match(par, m->match_size,
381 	      e->ethproto, e->invflags & EBT_IPROTO);
382 	if (ret < 0) {
383 		module_put(match->me);
384 		return ret;
385 	}
386 
387 	(*cnt)++;
388 	return 0;
389 }
390 
391 static inline int
392 ebt_check_watcher(struct ebt_entry_watcher *w, struct xt_tgchk_param *par,
393 		  unsigned int *cnt)
394 {
395 	const struct ebt_entry *e = par->entryinfo;
396 	struct xt_target *watcher;
397 	size_t left = ((char *)e + e->target_offset) - (char *)w;
398 	int ret;
399 
400 	if (left < sizeof(struct ebt_entry_watcher) ||
401 	   left - sizeof(struct ebt_entry_watcher) < w->watcher_size)
402 		return -EINVAL;
403 
404 	watcher = xt_request_find_target(NFPROTO_BRIDGE, w->u.name, 0);
405 	if (IS_ERR(watcher))
406 		return PTR_ERR(watcher);
407 	w->u.watcher = watcher;
408 
409 	par->target   = watcher;
410 	par->targinfo = w->data;
411 	ret = xt_check_target(par, w->watcher_size,
412 	      e->ethproto, e->invflags & EBT_IPROTO);
413 	if (ret < 0) {
414 		module_put(watcher->me);
415 		return ret;
416 	}
417 
418 	(*cnt)++;
419 	return 0;
420 }
421 
422 static int ebt_verify_pointers(const struct ebt_replace *repl,
423 			       struct ebt_table_info *newinfo)
424 {
425 	unsigned int limit = repl->entries_size;
426 	unsigned int valid_hooks = repl->valid_hooks;
427 	unsigned int offset = 0;
428 	int i;
429 
430 	for (i = 0; i < NF_BR_NUMHOOKS; i++)
431 		newinfo->hook_entry[i] = NULL;
432 
433 	newinfo->entries_size = repl->entries_size;
434 	newinfo->nentries = repl->nentries;
435 
436 	while (offset < limit) {
437 		size_t left = limit - offset;
438 		struct ebt_entry *e = (void *)newinfo->entries + offset;
439 
440 		if (left < sizeof(unsigned int))
441 			break;
442 
443 		for (i = 0; i < NF_BR_NUMHOOKS; i++) {
444 			if ((valid_hooks & (1 << i)) == 0)
445 				continue;
446 			if ((char __user *)repl->hook_entry[i] ==
447 			     repl->entries + offset)
448 				break;
449 		}
450 
451 		if (i != NF_BR_NUMHOOKS || !(e->bitmask & EBT_ENTRY_OR_ENTRIES)) {
452 			if (e->bitmask != 0) {
453 				/* we make userspace set this right,
454 				   so there is no misunderstanding */
455 				BUGPRINT("EBT_ENTRY_OR_ENTRIES shouldn't be set "
456 					 "in distinguisher\n");
457 				return -EINVAL;
458 			}
459 			if (i != NF_BR_NUMHOOKS)
460 				newinfo->hook_entry[i] = (struct ebt_entries *)e;
461 			if (left < sizeof(struct ebt_entries))
462 				break;
463 			offset += sizeof(struct ebt_entries);
464 		} else {
465 			if (left < sizeof(struct ebt_entry))
466 				break;
467 			if (left < e->next_offset)
468 				break;
469 			if (e->next_offset < sizeof(struct ebt_entry))
470 				return -EINVAL;
471 			offset += e->next_offset;
472 		}
473 	}
474 	if (offset != limit) {
475 		BUGPRINT("entries_size too small\n");
476 		return -EINVAL;
477 	}
478 
479 	/* check if all valid hooks have a chain */
480 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
481 		if (!newinfo->hook_entry[i] &&
482 		   (valid_hooks & (1 << i))) {
483 			BUGPRINT("Valid hook without chain\n");
484 			return -EINVAL;
485 		}
486 	}
487 	return 0;
488 }
489 
490 /*
491  * this one is very careful, as it is the first function
492  * to parse the userspace data
493  */
494 static inline int
495 ebt_check_entry_size_and_hooks(const struct ebt_entry *e,
496    const struct ebt_table_info *newinfo,
497    unsigned int *n, unsigned int *cnt,
498    unsigned int *totalcnt, unsigned int *udc_cnt)
499 {
500 	int i;
501 
502 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
503 		if ((void *)e == (void *)newinfo->hook_entry[i])
504 			break;
505 	}
506 	/* beginning of a new chain
507 	   if i == NF_BR_NUMHOOKS it must be a user defined chain */
508 	if (i != NF_BR_NUMHOOKS || !e->bitmask) {
509 		/* this checks if the previous chain has as many entries
510 		   as it said it has */
511 		if (*n != *cnt) {
512 			BUGPRINT("nentries does not equal the nr of entries "
513 				 "in the chain\n");
514 			return -EINVAL;
515 		}
516 		if (((struct ebt_entries *)e)->policy != EBT_DROP &&
517 		   ((struct ebt_entries *)e)->policy != EBT_ACCEPT) {
518 			/* only RETURN from udc */
519 			if (i != NF_BR_NUMHOOKS ||
520 			   ((struct ebt_entries *)e)->policy != EBT_RETURN) {
521 				BUGPRINT("bad policy\n");
522 				return -EINVAL;
523 			}
524 		}
525 		if (i == NF_BR_NUMHOOKS) /* it's a user defined chain */
526 			(*udc_cnt)++;
527 		if (((struct ebt_entries *)e)->counter_offset != *totalcnt) {
528 			BUGPRINT("counter_offset != totalcnt");
529 			return -EINVAL;
530 		}
531 		*n = ((struct ebt_entries *)e)->nentries;
532 		*cnt = 0;
533 		return 0;
534 	}
535 	/* a plain old entry, heh */
536 	if (sizeof(struct ebt_entry) > e->watchers_offset ||
537 	   e->watchers_offset > e->target_offset ||
538 	   e->target_offset >= e->next_offset) {
539 		BUGPRINT("entry offsets not in right order\n");
540 		return -EINVAL;
541 	}
542 	/* this is not checked anywhere else */
543 	if (e->next_offset - e->target_offset < sizeof(struct ebt_entry_target)) {
544 		BUGPRINT("target size too small\n");
545 		return -EINVAL;
546 	}
547 	(*cnt)++;
548 	(*totalcnt)++;
549 	return 0;
550 }
551 
552 struct ebt_cl_stack
553 {
554 	struct ebt_chainstack cs;
555 	int from;
556 	unsigned int hookmask;
557 };
558 
559 /*
560  * we need these positions to check that the jumps to a different part of the
561  * entries is a jump to the beginning of a new chain.
562  */
563 static inline int
564 ebt_get_udc_positions(struct ebt_entry *e, struct ebt_table_info *newinfo,
565    unsigned int *n, struct ebt_cl_stack *udc)
566 {
567 	int i;
568 
569 	/* we're only interested in chain starts */
570 	if (e->bitmask)
571 		return 0;
572 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
573 		if (newinfo->hook_entry[i] == (struct ebt_entries *)e)
574 			break;
575 	}
576 	/* only care about udc */
577 	if (i != NF_BR_NUMHOOKS)
578 		return 0;
579 
580 	udc[*n].cs.chaininfo = (struct ebt_entries *)e;
581 	/* these initialisations are depended on later in check_chainloops() */
582 	udc[*n].cs.n = 0;
583 	udc[*n].hookmask = 0;
584 
585 	(*n)++;
586 	return 0;
587 }
588 
589 static inline int
590 ebt_cleanup_match(struct ebt_entry_match *m, struct net *net, unsigned int *i)
591 {
592 	struct xt_mtdtor_param par;
593 
594 	if (i && (*i)-- == 0)
595 		return 1;
596 
597 	par.net       = net;
598 	par.match     = m->u.match;
599 	par.matchinfo = m->data;
600 	par.family    = NFPROTO_BRIDGE;
601 	if (par.match->destroy != NULL)
602 		par.match->destroy(&par);
603 	module_put(par.match->me);
604 	return 0;
605 }
606 
607 static inline int
608 ebt_cleanup_watcher(struct ebt_entry_watcher *w, struct net *net, unsigned int *i)
609 {
610 	struct xt_tgdtor_param par;
611 
612 	if (i && (*i)-- == 0)
613 		return 1;
614 
615 	par.net      = net;
616 	par.target   = w->u.watcher;
617 	par.targinfo = w->data;
618 	par.family   = NFPROTO_BRIDGE;
619 	if (par.target->destroy != NULL)
620 		par.target->destroy(&par);
621 	module_put(par.target->me);
622 	return 0;
623 }
624 
625 static inline int
626 ebt_cleanup_entry(struct ebt_entry *e, struct net *net, unsigned int *cnt)
627 {
628 	struct xt_tgdtor_param par;
629 	struct ebt_entry_target *t;
630 
631 	if (e->bitmask == 0)
632 		return 0;
633 	/* we're done */
634 	if (cnt && (*cnt)-- == 0)
635 		return 1;
636 	EBT_WATCHER_ITERATE(e, ebt_cleanup_watcher, net, NULL);
637 	EBT_MATCH_ITERATE(e, ebt_cleanup_match, net, NULL);
638 	t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
639 
640 	par.net      = net;
641 	par.target   = t->u.target;
642 	par.targinfo = t->data;
643 	par.family   = NFPROTO_BRIDGE;
644 	if (par.target->destroy != NULL)
645 		par.target->destroy(&par);
646 	module_put(par.target->me);
647 	return 0;
648 }
649 
650 static inline int
651 ebt_check_entry(struct ebt_entry *e, struct net *net,
652    const struct ebt_table_info *newinfo,
653    const char *name, unsigned int *cnt,
654    struct ebt_cl_stack *cl_s, unsigned int udc_cnt)
655 {
656 	struct ebt_entry_target *t;
657 	struct xt_target *target;
658 	unsigned int i, j, hook = 0, hookmask = 0;
659 	size_t gap;
660 	int ret;
661 	struct xt_mtchk_param mtpar;
662 	struct xt_tgchk_param tgpar;
663 
664 	/* don't mess with the struct ebt_entries */
665 	if (e->bitmask == 0)
666 		return 0;
667 
668 	if (e->bitmask & ~EBT_F_MASK) {
669 		BUGPRINT("Unknown flag for bitmask\n");
670 		return -EINVAL;
671 	}
672 	if (e->invflags & ~EBT_INV_MASK) {
673 		BUGPRINT("Unknown flag for inv bitmask\n");
674 		return -EINVAL;
675 	}
676 	if ( (e->bitmask & EBT_NOPROTO) && (e->bitmask & EBT_802_3) ) {
677 		BUGPRINT("NOPROTO & 802_3 not allowed\n");
678 		return -EINVAL;
679 	}
680 	/* what hook do we belong to? */
681 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
682 		if (!newinfo->hook_entry[i])
683 			continue;
684 		if ((char *)newinfo->hook_entry[i] < (char *)e)
685 			hook = i;
686 		else
687 			break;
688 	}
689 	/* (1 << NF_BR_NUMHOOKS) tells the check functions the rule is on
690 	   a base chain */
691 	if (i < NF_BR_NUMHOOKS)
692 		hookmask = (1 << hook) | (1 << NF_BR_NUMHOOKS);
693 	else {
694 		for (i = 0; i < udc_cnt; i++)
695 			if ((char *)(cl_s[i].cs.chaininfo) > (char *)e)
696 				break;
697 		if (i == 0)
698 			hookmask = (1 << hook) | (1 << NF_BR_NUMHOOKS);
699 		else
700 			hookmask = cl_s[i - 1].hookmask;
701 	}
702 	i = 0;
703 
704 	mtpar.net	= tgpar.net       = net;
705 	mtpar.table     = tgpar.table     = name;
706 	mtpar.entryinfo = tgpar.entryinfo = e;
707 	mtpar.hook_mask = tgpar.hook_mask = hookmask;
708 	mtpar.family    = tgpar.family    = NFPROTO_BRIDGE;
709 	ret = EBT_MATCH_ITERATE(e, ebt_check_match, &mtpar, &i);
710 	if (ret != 0)
711 		goto cleanup_matches;
712 	j = 0;
713 	ret = EBT_WATCHER_ITERATE(e, ebt_check_watcher, &tgpar, &j);
714 	if (ret != 0)
715 		goto cleanup_watchers;
716 	t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
717 	gap = e->next_offset - e->target_offset;
718 
719 	target = xt_request_find_target(NFPROTO_BRIDGE, t->u.name, 0);
720 	if (IS_ERR(target)) {
721 		ret = PTR_ERR(target);
722 		goto cleanup_watchers;
723 	}
724 
725 	t->u.target = target;
726 	if (t->u.target == &ebt_standard_target) {
727 		if (gap < sizeof(struct ebt_standard_target)) {
728 			BUGPRINT("Standard target size too big\n");
729 			ret = -EFAULT;
730 			goto cleanup_watchers;
731 		}
732 		if (((struct ebt_standard_target *)t)->verdict <
733 		   -NUM_STANDARD_TARGETS) {
734 			BUGPRINT("Invalid standard target\n");
735 			ret = -EFAULT;
736 			goto cleanup_watchers;
737 		}
738 	} else if (t->target_size > gap - sizeof(struct ebt_entry_target)) {
739 		module_put(t->u.target->me);
740 		ret = -EFAULT;
741 		goto cleanup_watchers;
742 	}
743 
744 	tgpar.target   = target;
745 	tgpar.targinfo = t->data;
746 	ret = xt_check_target(&tgpar, t->target_size,
747 	      e->ethproto, e->invflags & EBT_IPROTO);
748 	if (ret < 0) {
749 		module_put(target->me);
750 		goto cleanup_watchers;
751 	}
752 	(*cnt)++;
753 	return 0;
754 cleanup_watchers:
755 	EBT_WATCHER_ITERATE(e, ebt_cleanup_watcher, net, &j);
756 cleanup_matches:
757 	EBT_MATCH_ITERATE(e, ebt_cleanup_match, net, &i);
758 	return ret;
759 }
760 
761 /*
762  * checks for loops and sets the hook mask for udc
763  * the hook mask for udc tells us from which base chains the udc can be
764  * accessed. This mask is a parameter to the check() functions of the extensions
765  */
766 static int check_chainloops(const struct ebt_entries *chain, struct ebt_cl_stack *cl_s,
767    unsigned int udc_cnt, unsigned int hooknr, char *base)
768 {
769 	int i, chain_nr = -1, pos = 0, nentries = chain->nentries, verdict;
770 	const struct ebt_entry *e = (struct ebt_entry *)chain->data;
771 	const struct ebt_entry_target *t;
772 
773 	while (pos < nentries || chain_nr != -1) {
774 		/* end of udc, go back one 'recursion' step */
775 		if (pos == nentries) {
776 			/* put back values of the time when this chain was called */
777 			e = cl_s[chain_nr].cs.e;
778 			if (cl_s[chain_nr].from != -1)
779 				nentries =
780 				cl_s[cl_s[chain_nr].from].cs.chaininfo->nentries;
781 			else
782 				nentries = chain->nentries;
783 			pos = cl_s[chain_nr].cs.n;
784 			/* make sure we won't see a loop that isn't one */
785 			cl_s[chain_nr].cs.n = 0;
786 			chain_nr = cl_s[chain_nr].from;
787 			if (pos == nentries)
788 				continue;
789 		}
790 		t = (struct ebt_entry_target *)
791 		   (((char *)e) + e->target_offset);
792 		if (strcmp(t->u.name, EBT_STANDARD_TARGET))
793 			goto letscontinue;
794 		if (e->target_offset + sizeof(struct ebt_standard_target) >
795 		   e->next_offset) {
796 			BUGPRINT("Standard target size too big\n");
797 			return -1;
798 		}
799 		verdict = ((struct ebt_standard_target *)t)->verdict;
800 		if (verdict >= 0) { /* jump to another chain */
801 			struct ebt_entries *hlp2 =
802 			   (struct ebt_entries *)(base + verdict);
803 			for (i = 0; i < udc_cnt; i++)
804 				if (hlp2 == cl_s[i].cs.chaininfo)
805 					break;
806 			/* bad destination or loop */
807 			if (i == udc_cnt) {
808 				BUGPRINT("bad destination\n");
809 				return -1;
810 			}
811 			if (cl_s[i].cs.n) {
812 				BUGPRINT("loop\n");
813 				return -1;
814 			}
815 			if (cl_s[i].hookmask & (1 << hooknr))
816 				goto letscontinue;
817 			/* this can't be 0, so the loop test is correct */
818 			cl_s[i].cs.n = pos + 1;
819 			pos = 0;
820 			cl_s[i].cs.e = ebt_next_entry(e);
821 			e = (struct ebt_entry *)(hlp2->data);
822 			nentries = hlp2->nentries;
823 			cl_s[i].from = chain_nr;
824 			chain_nr = i;
825 			/* this udc is accessible from the base chain for hooknr */
826 			cl_s[i].hookmask |= (1 << hooknr);
827 			continue;
828 		}
829 letscontinue:
830 		e = ebt_next_entry(e);
831 		pos++;
832 	}
833 	return 0;
834 }
835 
836 /* do the parsing of the table/chains/entries/matches/watchers/targets, heh */
837 static int translate_table(struct net *net, const char *name,
838 			   struct ebt_table_info *newinfo)
839 {
840 	unsigned int i, j, k, udc_cnt;
841 	int ret;
842 	struct ebt_cl_stack *cl_s = NULL; /* used in the checking for chain loops */
843 
844 	i = 0;
845 	while (i < NF_BR_NUMHOOKS && !newinfo->hook_entry[i])
846 		i++;
847 	if (i == NF_BR_NUMHOOKS) {
848 		BUGPRINT("No valid hooks specified\n");
849 		return -EINVAL;
850 	}
851 	if (newinfo->hook_entry[i] != (struct ebt_entries *)newinfo->entries) {
852 		BUGPRINT("Chains don't start at beginning\n");
853 		return -EINVAL;
854 	}
855 	/* make sure chains are ordered after each other in same order
856 	   as their corresponding hooks */
857 	for (j = i + 1; j < NF_BR_NUMHOOKS; j++) {
858 		if (!newinfo->hook_entry[j])
859 			continue;
860 		if (newinfo->hook_entry[j] <= newinfo->hook_entry[i]) {
861 			BUGPRINT("Hook order must be followed\n");
862 			return -EINVAL;
863 		}
864 		i = j;
865 	}
866 
867 	/* do some early checkings and initialize some things */
868 	i = 0; /* holds the expected nr. of entries for the chain */
869 	j = 0; /* holds the up to now counted entries for the chain */
870 	k = 0; /* holds the total nr. of entries, should equal
871 		  newinfo->nentries afterwards */
872 	udc_cnt = 0; /* will hold the nr. of user defined chains (udc) */
873 	ret = EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
874 	   ebt_check_entry_size_and_hooks, newinfo,
875 	   &i, &j, &k, &udc_cnt);
876 
877 	if (ret != 0)
878 		return ret;
879 
880 	if (i != j) {
881 		BUGPRINT("nentries does not equal the nr of entries in the "
882 			 "(last) chain\n");
883 		return -EINVAL;
884 	}
885 	if (k != newinfo->nentries) {
886 		BUGPRINT("Total nentries is wrong\n");
887 		return -EINVAL;
888 	}
889 
890 	/* get the location of the udc, put them in an array
891 	   while we're at it, allocate the chainstack */
892 	if (udc_cnt) {
893 		/* this will get free'd in do_replace()/ebt_register_table()
894 		   if an error occurs */
895 		newinfo->chainstack =
896 			vmalloc(nr_cpu_ids * sizeof(*(newinfo->chainstack)));
897 		if (!newinfo->chainstack)
898 			return -ENOMEM;
899 		for_each_possible_cpu(i) {
900 			newinfo->chainstack[i] =
901 			  vmalloc(udc_cnt * sizeof(*(newinfo->chainstack[0])));
902 			if (!newinfo->chainstack[i]) {
903 				while (i)
904 					vfree(newinfo->chainstack[--i]);
905 				vfree(newinfo->chainstack);
906 				newinfo->chainstack = NULL;
907 				return -ENOMEM;
908 			}
909 		}
910 
911 		cl_s = vmalloc(udc_cnt * sizeof(*cl_s));
912 		if (!cl_s)
913 			return -ENOMEM;
914 		i = 0; /* the i'th udc */
915 		EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
916 		   ebt_get_udc_positions, newinfo, &i, cl_s);
917 		/* sanity check */
918 		if (i != udc_cnt) {
919 			BUGPRINT("i != udc_cnt\n");
920 			vfree(cl_s);
921 			return -EFAULT;
922 		}
923 	}
924 
925 	/* Check for loops */
926 	for (i = 0; i < NF_BR_NUMHOOKS; i++)
927 		if (newinfo->hook_entry[i])
928 			if (check_chainloops(newinfo->hook_entry[i],
929 			   cl_s, udc_cnt, i, newinfo->entries)) {
930 				vfree(cl_s);
931 				return -EINVAL;
932 			}
933 
934 	/* we now know the following (along with E=mc²):
935 	   - the nr of entries in each chain is right
936 	   - the size of the allocated space is right
937 	   - all valid hooks have a corresponding chain
938 	   - there are no loops
939 	   - wrong data can still be on the level of a single entry
940 	   - could be there are jumps to places that are not the
941 	     beginning of a chain. This can only occur in chains that
942 	     are not accessible from any base chains, so we don't care. */
943 
944 	/* used to know what we need to clean up if something goes wrong */
945 	i = 0;
946 	ret = EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
947 	   ebt_check_entry, net, newinfo, name, &i, cl_s, udc_cnt);
948 	if (ret != 0) {
949 		EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
950 				  ebt_cleanup_entry, net, &i);
951 	}
952 	vfree(cl_s);
953 	return ret;
954 }
955 
956 /* called under write_lock */
957 static void get_counters(const struct ebt_counter *oldcounters,
958    struct ebt_counter *counters, unsigned int nentries)
959 {
960 	int i, cpu;
961 	struct ebt_counter *counter_base;
962 
963 	/* counters of cpu 0 */
964 	memcpy(counters, oldcounters,
965 	       sizeof(struct ebt_counter) * nentries);
966 
967 	/* add other counters to those of cpu 0 */
968 	for_each_possible_cpu(cpu) {
969 		if (cpu == 0)
970 			continue;
971 		counter_base = COUNTER_BASE(oldcounters, nentries, cpu);
972 		for (i = 0; i < nentries; i++) {
973 			counters[i].pcnt += counter_base[i].pcnt;
974 			counters[i].bcnt += counter_base[i].bcnt;
975 		}
976 	}
977 }
978 
979 static int do_replace_finish(struct net *net, struct ebt_replace *repl,
980 			      struct ebt_table_info *newinfo)
981 {
982 	int ret, i;
983 	struct ebt_counter *counterstmp = NULL;
984 	/* used to be able to unlock earlier */
985 	struct ebt_table_info *table;
986 	struct ebt_table *t;
987 
988 	/* the user wants counters back
989 	   the check on the size is done later, when we have the lock */
990 	if (repl->num_counters) {
991 		unsigned long size = repl->num_counters * sizeof(*counterstmp);
992 		counterstmp = vmalloc(size);
993 		if (!counterstmp)
994 			return -ENOMEM;
995 	}
996 
997 	newinfo->chainstack = NULL;
998 	ret = ebt_verify_pointers(repl, newinfo);
999 	if (ret != 0)
1000 		goto free_counterstmp;
1001 
1002 	ret = translate_table(net, repl->name, newinfo);
1003 
1004 	if (ret != 0)
1005 		goto free_counterstmp;
1006 
1007 	t = find_table_lock(net, repl->name, &ret, &ebt_mutex);
1008 	if (!t) {
1009 		ret = -ENOENT;
1010 		goto free_iterate;
1011 	}
1012 
1013 	/* the table doesn't like it */
1014 	if (t->check && (ret = t->check(newinfo, repl->valid_hooks)))
1015 		goto free_unlock;
1016 
1017 	if (repl->num_counters && repl->num_counters != t->private->nentries) {
1018 		BUGPRINT("Wrong nr. of counters requested\n");
1019 		ret = -EINVAL;
1020 		goto free_unlock;
1021 	}
1022 
1023 	/* we have the mutex lock, so no danger in reading this pointer */
1024 	table = t->private;
1025 	/* make sure the table can only be rmmod'ed if it contains no rules */
1026 	if (!table->nentries && newinfo->nentries && !try_module_get(t->me)) {
1027 		ret = -ENOENT;
1028 		goto free_unlock;
1029 	} else if (table->nentries && !newinfo->nentries)
1030 		module_put(t->me);
1031 	/* we need an atomic snapshot of the counters */
1032 	write_lock_bh(&t->lock);
1033 	if (repl->num_counters)
1034 		get_counters(t->private->counters, counterstmp,
1035 		   t->private->nentries);
1036 
1037 	t->private = newinfo;
1038 	write_unlock_bh(&t->lock);
1039 	mutex_unlock(&ebt_mutex);
1040 	/* so, a user can change the chains while having messed up her counter
1041 	   allocation. Only reason why this is done is because this way the lock
1042 	   is held only once, while this doesn't bring the kernel into a
1043 	   dangerous state. */
1044 	if (repl->num_counters &&
1045 	   copy_to_user(repl->counters, counterstmp,
1046 	   repl->num_counters * sizeof(struct ebt_counter))) {
1047 		/* Silent error, can't fail, new table is already in place */
1048 		net_warn_ratelimited("ebtables: counters copy to user failed while replacing table\n");
1049 	}
1050 
1051 	/* decrease module count and free resources */
1052 	EBT_ENTRY_ITERATE(table->entries, table->entries_size,
1053 			  ebt_cleanup_entry, net, NULL);
1054 
1055 	vfree(table->entries);
1056 	if (table->chainstack) {
1057 		for_each_possible_cpu(i)
1058 			vfree(table->chainstack[i]);
1059 		vfree(table->chainstack);
1060 	}
1061 	vfree(table);
1062 
1063 	vfree(counterstmp);
1064 
1065 #ifdef CONFIG_AUDIT
1066 	if (audit_enabled) {
1067 		struct audit_buffer *ab;
1068 
1069 		ab = audit_log_start(current->audit_context, GFP_KERNEL,
1070 				     AUDIT_NETFILTER_CFG);
1071 		if (ab) {
1072 			audit_log_format(ab, "table=%s family=%u entries=%u",
1073 					 repl->name, AF_BRIDGE, repl->nentries);
1074 			audit_log_end(ab);
1075 		}
1076 	}
1077 #endif
1078 	return ret;
1079 
1080 free_unlock:
1081 	mutex_unlock(&ebt_mutex);
1082 free_iterate:
1083 	EBT_ENTRY_ITERATE(newinfo->entries, newinfo->entries_size,
1084 			  ebt_cleanup_entry, net, NULL);
1085 free_counterstmp:
1086 	vfree(counterstmp);
1087 	/* can be initialized in translate_table() */
1088 	if (newinfo->chainstack) {
1089 		for_each_possible_cpu(i)
1090 			vfree(newinfo->chainstack[i]);
1091 		vfree(newinfo->chainstack);
1092 	}
1093 	return ret;
1094 }
1095 
1096 /* replace the table */
1097 static int do_replace(struct net *net, const void __user *user,
1098 		      unsigned int len)
1099 {
1100 	int ret, countersize;
1101 	struct ebt_table_info *newinfo;
1102 	struct ebt_replace tmp;
1103 
1104 	if (copy_from_user(&tmp, user, sizeof(tmp)) != 0)
1105 		return -EFAULT;
1106 
1107 	if (len != sizeof(tmp) + tmp.entries_size) {
1108 		BUGPRINT("Wrong len argument\n");
1109 		return -EINVAL;
1110 	}
1111 
1112 	if (tmp.entries_size == 0) {
1113 		BUGPRINT("Entries_size never zero\n");
1114 		return -EINVAL;
1115 	}
1116 	/* overflow check */
1117 	if (tmp.nentries >= ((INT_MAX - sizeof(struct ebt_table_info)) /
1118 			NR_CPUS - SMP_CACHE_BYTES) / sizeof(struct ebt_counter))
1119 		return -ENOMEM;
1120 	if (tmp.num_counters >= INT_MAX / sizeof(struct ebt_counter))
1121 		return -ENOMEM;
1122 
1123 	tmp.name[sizeof(tmp.name) - 1] = 0;
1124 
1125 	countersize = COUNTER_OFFSET(tmp.nentries) * nr_cpu_ids;
1126 	newinfo = vmalloc(sizeof(*newinfo) + countersize);
1127 	if (!newinfo)
1128 		return -ENOMEM;
1129 
1130 	if (countersize)
1131 		memset(newinfo->counters, 0, countersize);
1132 
1133 	newinfo->entries = vmalloc(tmp.entries_size);
1134 	if (!newinfo->entries) {
1135 		ret = -ENOMEM;
1136 		goto free_newinfo;
1137 	}
1138 	if (copy_from_user(
1139 	   newinfo->entries, tmp.entries, tmp.entries_size) != 0) {
1140 		BUGPRINT("Couldn't copy entries from userspace\n");
1141 		ret = -EFAULT;
1142 		goto free_entries;
1143 	}
1144 
1145 	ret = do_replace_finish(net, &tmp, newinfo);
1146 	if (ret == 0)
1147 		return ret;
1148 free_entries:
1149 	vfree(newinfo->entries);
1150 free_newinfo:
1151 	vfree(newinfo);
1152 	return ret;
1153 }
1154 
1155 struct ebt_table *
1156 ebt_register_table(struct net *net, const struct ebt_table *input_table)
1157 {
1158 	struct ebt_table_info *newinfo;
1159 	struct ebt_table *t, *table;
1160 	struct ebt_replace_kernel *repl;
1161 	int ret, i, countersize;
1162 	void *p;
1163 
1164 	if (input_table == NULL || (repl = input_table->table) == NULL ||
1165 	    repl->entries == NULL || repl->entries_size == 0 ||
1166 	    repl->counters != NULL || input_table->private != NULL) {
1167 		BUGPRINT("Bad table data for ebt_register_table!!!\n");
1168 		return ERR_PTR(-EINVAL);
1169 	}
1170 
1171 	/* Don't add one table to multiple lists. */
1172 	table = kmemdup(input_table, sizeof(struct ebt_table), GFP_KERNEL);
1173 	if (!table) {
1174 		ret = -ENOMEM;
1175 		goto out;
1176 	}
1177 
1178 	countersize = COUNTER_OFFSET(repl->nentries) * nr_cpu_ids;
1179 	newinfo = vmalloc(sizeof(*newinfo) + countersize);
1180 	ret = -ENOMEM;
1181 	if (!newinfo)
1182 		goto free_table;
1183 
1184 	p = vmalloc(repl->entries_size);
1185 	if (!p)
1186 		goto free_newinfo;
1187 
1188 	memcpy(p, repl->entries, repl->entries_size);
1189 	newinfo->entries = p;
1190 
1191 	newinfo->entries_size = repl->entries_size;
1192 	newinfo->nentries = repl->nentries;
1193 
1194 	if (countersize)
1195 		memset(newinfo->counters, 0, countersize);
1196 
1197 	/* fill in newinfo and parse the entries */
1198 	newinfo->chainstack = NULL;
1199 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
1200 		if ((repl->valid_hooks & (1 << i)) == 0)
1201 			newinfo->hook_entry[i] = NULL;
1202 		else
1203 			newinfo->hook_entry[i] = p +
1204 				((char *)repl->hook_entry[i] - repl->entries);
1205 	}
1206 	ret = translate_table(net, repl->name, newinfo);
1207 	if (ret != 0) {
1208 		BUGPRINT("Translate_table failed\n");
1209 		goto free_chainstack;
1210 	}
1211 
1212 	if (table->check && table->check(newinfo, table->valid_hooks)) {
1213 		BUGPRINT("The table doesn't like its own initial data, lol\n");
1214 		ret = -EINVAL;
1215 		goto free_chainstack;
1216 	}
1217 
1218 	table->private = newinfo;
1219 	rwlock_init(&table->lock);
1220 	mutex_lock(&ebt_mutex);
1221 	list_for_each_entry(t, &net->xt.tables[NFPROTO_BRIDGE], list) {
1222 		if (strcmp(t->name, table->name) == 0) {
1223 			ret = -EEXIST;
1224 			BUGPRINT("Table name already exists\n");
1225 			goto free_unlock;
1226 		}
1227 	}
1228 
1229 	/* Hold a reference count if the chains aren't empty */
1230 	if (newinfo->nentries && !try_module_get(table->me)) {
1231 		ret = -ENOENT;
1232 		goto free_unlock;
1233 	}
1234 	list_add(&table->list, &net->xt.tables[NFPROTO_BRIDGE]);
1235 	mutex_unlock(&ebt_mutex);
1236 	return table;
1237 free_unlock:
1238 	mutex_unlock(&ebt_mutex);
1239 free_chainstack:
1240 	if (newinfo->chainstack) {
1241 		for_each_possible_cpu(i)
1242 			vfree(newinfo->chainstack[i]);
1243 		vfree(newinfo->chainstack);
1244 	}
1245 	vfree(newinfo->entries);
1246 free_newinfo:
1247 	vfree(newinfo);
1248 free_table:
1249 	kfree(table);
1250 out:
1251 	return ERR_PTR(ret);
1252 }
1253 
1254 void ebt_unregister_table(struct net *net, struct ebt_table *table)
1255 {
1256 	int i;
1257 
1258 	if (!table) {
1259 		BUGPRINT("Request to unregister NULL table!!!\n");
1260 		return;
1261 	}
1262 	mutex_lock(&ebt_mutex);
1263 	list_del(&table->list);
1264 	mutex_unlock(&ebt_mutex);
1265 	EBT_ENTRY_ITERATE(table->private->entries, table->private->entries_size,
1266 			  ebt_cleanup_entry, net, NULL);
1267 	if (table->private->nentries)
1268 		module_put(table->me);
1269 	vfree(table->private->entries);
1270 	if (table->private->chainstack) {
1271 		for_each_possible_cpu(i)
1272 			vfree(table->private->chainstack[i]);
1273 		vfree(table->private->chainstack);
1274 	}
1275 	vfree(table->private);
1276 	kfree(table);
1277 }
1278 
1279 /* userspace just supplied us with counters */
1280 static int do_update_counters(struct net *net, const char *name,
1281 				struct ebt_counter __user *counters,
1282 				unsigned int num_counters,
1283 				const void __user *user, unsigned int len)
1284 {
1285 	int i, ret;
1286 	struct ebt_counter *tmp;
1287 	struct ebt_table *t;
1288 
1289 	if (num_counters == 0)
1290 		return -EINVAL;
1291 
1292 	tmp = vmalloc(num_counters * sizeof(*tmp));
1293 	if (!tmp)
1294 		return -ENOMEM;
1295 
1296 	t = find_table_lock(net, name, &ret, &ebt_mutex);
1297 	if (!t)
1298 		goto free_tmp;
1299 
1300 	if (num_counters != t->private->nentries) {
1301 		BUGPRINT("Wrong nr of counters\n");
1302 		ret = -EINVAL;
1303 		goto unlock_mutex;
1304 	}
1305 
1306 	if (copy_from_user(tmp, counters, num_counters * sizeof(*counters))) {
1307 		ret = -EFAULT;
1308 		goto unlock_mutex;
1309 	}
1310 
1311 	/* we want an atomic add of the counters */
1312 	write_lock_bh(&t->lock);
1313 
1314 	/* we add to the counters of the first cpu */
1315 	for (i = 0; i < num_counters; i++) {
1316 		t->private->counters[i].pcnt += tmp[i].pcnt;
1317 		t->private->counters[i].bcnt += tmp[i].bcnt;
1318 	}
1319 
1320 	write_unlock_bh(&t->lock);
1321 	ret = 0;
1322 unlock_mutex:
1323 	mutex_unlock(&ebt_mutex);
1324 free_tmp:
1325 	vfree(tmp);
1326 	return ret;
1327 }
1328 
1329 static int update_counters(struct net *net, const void __user *user,
1330 			    unsigned int len)
1331 {
1332 	struct ebt_replace hlp;
1333 
1334 	if (copy_from_user(&hlp, user, sizeof(hlp)))
1335 		return -EFAULT;
1336 
1337 	if (len != sizeof(hlp) + hlp.num_counters * sizeof(struct ebt_counter))
1338 		return -EINVAL;
1339 
1340 	return do_update_counters(net, hlp.name, hlp.counters,
1341 				hlp.num_counters, user, len);
1342 }
1343 
1344 static inline int ebt_make_matchname(const struct ebt_entry_match *m,
1345     const char *base, char __user *ubase)
1346 {
1347 	char __user *hlp = ubase + ((char *)m - base);
1348 	char name[EBT_FUNCTION_MAXNAMELEN] = {};
1349 
1350 	/* ebtables expects 32 bytes long names but xt_match names are 29 bytes
1351 	   long. Copy 29 bytes and fill remaining bytes with zeroes. */
1352 	strlcpy(name, m->u.match->name, sizeof(name));
1353 	if (copy_to_user(hlp, name, EBT_FUNCTION_MAXNAMELEN))
1354 		return -EFAULT;
1355 	return 0;
1356 }
1357 
1358 static inline int ebt_make_watchername(const struct ebt_entry_watcher *w,
1359     const char *base, char __user *ubase)
1360 {
1361 	char __user *hlp = ubase + ((char *)w - base);
1362 	char name[EBT_FUNCTION_MAXNAMELEN] = {};
1363 
1364 	strlcpy(name, w->u.watcher->name, sizeof(name));
1365 	if (copy_to_user(hlp , name, EBT_FUNCTION_MAXNAMELEN))
1366 		return -EFAULT;
1367 	return 0;
1368 }
1369 
1370 static inline int
1371 ebt_make_names(struct ebt_entry *e, const char *base, char __user *ubase)
1372 {
1373 	int ret;
1374 	char __user *hlp;
1375 	const struct ebt_entry_target *t;
1376 	char name[EBT_FUNCTION_MAXNAMELEN] = {};
1377 
1378 	if (e->bitmask == 0)
1379 		return 0;
1380 
1381 	hlp = ubase + (((char *)e + e->target_offset) - base);
1382 	t = (struct ebt_entry_target *)(((char *)e) + e->target_offset);
1383 
1384 	ret = EBT_MATCH_ITERATE(e, ebt_make_matchname, base, ubase);
1385 	if (ret != 0)
1386 		return ret;
1387 	ret = EBT_WATCHER_ITERATE(e, ebt_make_watchername, base, ubase);
1388 	if (ret != 0)
1389 		return ret;
1390 	strlcpy(name, t->u.target->name, sizeof(name));
1391 	if (copy_to_user(hlp, name, EBT_FUNCTION_MAXNAMELEN))
1392 		return -EFAULT;
1393 	return 0;
1394 }
1395 
1396 static int copy_counters_to_user(struct ebt_table *t,
1397 				  const struct ebt_counter *oldcounters,
1398 				  void __user *user, unsigned int num_counters,
1399 				  unsigned int nentries)
1400 {
1401 	struct ebt_counter *counterstmp;
1402 	int ret = 0;
1403 
1404 	/* userspace might not need the counters */
1405 	if (num_counters == 0)
1406 		return 0;
1407 
1408 	if (num_counters != nentries) {
1409 		BUGPRINT("Num_counters wrong\n");
1410 		return -EINVAL;
1411 	}
1412 
1413 	counterstmp = vmalloc(nentries * sizeof(*counterstmp));
1414 	if (!counterstmp)
1415 		return -ENOMEM;
1416 
1417 	write_lock_bh(&t->lock);
1418 	get_counters(oldcounters, counterstmp, nentries);
1419 	write_unlock_bh(&t->lock);
1420 
1421 	if (copy_to_user(user, counterstmp,
1422 	   nentries * sizeof(struct ebt_counter)))
1423 		ret = -EFAULT;
1424 	vfree(counterstmp);
1425 	return ret;
1426 }
1427 
1428 /* called with ebt_mutex locked */
1429 static int copy_everything_to_user(struct ebt_table *t, void __user *user,
1430     const int *len, int cmd)
1431 {
1432 	struct ebt_replace tmp;
1433 	const struct ebt_counter *oldcounters;
1434 	unsigned int entries_size, nentries;
1435 	int ret;
1436 	char *entries;
1437 
1438 	if (cmd == EBT_SO_GET_ENTRIES) {
1439 		entries_size = t->private->entries_size;
1440 		nentries = t->private->nentries;
1441 		entries = t->private->entries;
1442 		oldcounters = t->private->counters;
1443 	} else {
1444 		entries_size = t->table->entries_size;
1445 		nentries = t->table->nentries;
1446 		entries = t->table->entries;
1447 		oldcounters = t->table->counters;
1448 	}
1449 
1450 	if (copy_from_user(&tmp, user, sizeof(tmp)))
1451 		return -EFAULT;
1452 
1453 	if (*len != sizeof(struct ebt_replace) + entries_size +
1454 	   (tmp.num_counters ? nentries * sizeof(struct ebt_counter) : 0))
1455 		return -EINVAL;
1456 
1457 	if (tmp.nentries != nentries) {
1458 		BUGPRINT("Nentries wrong\n");
1459 		return -EINVAL;
1460 	}
1461 
1462 	if (tmp.entries_size != entries_size) {
1463 		BUGPRINT("Wrong size\n");
1464 		return -EINVAL;
1465 	}
1466 
1467 	ret = copy_counters_to_user(t, oldcounters, tmp.counters,
1468 					tmp.num_counters, nentries);
1469 	if (ret)
1470 		return ret;
1471 
1472 	if (copy_to_user(tmp.entries, entries, entries_size)) {
1473 		BUGPRINT("Couldn't copy entries to userspace\n");
1474 		return -EFAULT;
1475 	}
1476 	/* set the match/watcher/target names right */
1477 	return EBT_ENTRY_ITERATE(entries, entries_size,
1478 	   ebt_make_names, entries, tmp.entries);
1479 }
1480 
1481 static int do_ebt_set_ctl(struct sock *sk,
1482 	int cmd, void __user *user, unsigned int len)
1483 {
1484 	int ret;
1485 	struct net *net = sock_net(sk);
1486 
1487 	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1488 		return -EPERM;
1489 
1490 	switch (cmd) {
1491 	case EBT_SO_SET_ENTRIES:
1492 		ret = do_replace(net, user, len);
1493 		break;
1494 	case EBT_SO_SET_COUNTERS:
1495 		ret = update_counters(net, user, len);
1496 		break;
1497 	default:
1498 		ret = -EINVAL;
1499 	}
1500 	return ret;
1501 }
1502 
1503 static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
1504 {
1505 	int ret;
1506 	struct ebt_replace tmp;
1507 	struct ebt_table *t;
1508 	struct net *net = sock_net(sk);
1509 
1510 	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
1511 		return -EPERM;
1512 
1513 	if (copy_from_user(&tmp, user, sizeof(tmp)))
1514 		return -EFAULT;
1515 
1516 	t = find_table_lock(net, tmp.name, &ret, &ebt_mutex);
1517 	if (!t)
1518 		return ret;
1519 
1520 	switch (cmd) {
1521 	case EBT_SO_GET_INFO:
1522 	case EBT_SO_GET_INIT_INFO:
1523 		if (*len != sizeof(struct ebt_replace)) {
1524 			ret = -EINVAL;
1525 			mutex_unlock(&ebt_mutex);
1526 			break;
1527 		}
1528 		if (cmd == EBT_SO_GET_INFO) {
1529 			tmp.nentries = t->private->nentries;
1530 			tmp.entries_size = t->private->entries_size;
1531 			tmp.valid_hooks = t->valid_hooks;
1532 		} else {
1533 			tmp.nentries = t->table->nentries;
1534 			tmp.entries_size = t->table->entries_size;
1535 			tmp.valid_hooks = t->table->valid_hooks;
1536 		}
1537 		mutex_unlock(&ebt_mutex);
1538 		if (copy_to_user(user, &tmp, *len) != 0) {
1539 			BUGPRINT("c2u Didn't work\n");
1540 			ret = -EFAULT;
1541 			break;
1542 		}
1543 		ret = 0;
1544 		break;
1545 
1546 	case EBT_SO_GET_ENTRIES:
1547 	case EBT_SO_GET_INIT_ENTRIES:
1548 		ret = copy_everything_to_user(t, user, len, cmd);
1549 		mutex_unlock(&ebt_mutex);
1550 		break;
1551 
1552 	default:
1553 		mutex_unlock(&ebt_mutex);
1554 		ret = -EINVAL;
1555 	}
1556 
1557 	return ret;
1558 }
1559 
1560 #ifdef CONFIG_COMPAT
1561 /* 32 bit-userspace compatibility definitions. */
1562 struct compat_ebt_replace {
1563 	char name[EBT_TABLE_MAXNAMELEN];
1564 	compat_uint_t valid_hooks;
1565 	compat_uint_t nentries;
1566 	compat_uint_t entries_size;
1567 	/* start of the chains */
1568 	compat_uptr_t hook_entry[NF_BR_NUMHOOKS];
1569 	/* nr of counters userspace expects back */
1570 	compat_uint_t num_counters;
1571 	/* where the kernel will put the old counters. */
1572 	compat_uptr_t counters;
1573 	compat_uptr_t entries;
1574 };
1575 
1576 /* struct ebt_entry_match, _target and _watcher have same layout */
1577 struct compat_ebt_entry_mwt {
1578 	union {
1579 		char name[EBT_FUNCTION_MAXNAMELEN];
1580 		compat_uptr_t ptr;
1581 	} u;
1582 	compat_uint_t match_size;
1583 	compat_uint_t data[0];
1584 };
1585 
1586 /* account for possible padding between match_size and ->data */
1587 static int ebt_compat_entry_padsize(void)
1588 {
1589 	BUILD_BUG_ON(XT_ALIGN(sizeof(struct ebt_entry_match)) <
1590 			COMPAT_XT_ALIGN(sizeof(struct compat_ebt_entry_mwt)));
1591 	return (int) XT_ALIGN(sizeof(struct ebt_entry_match)) -
1592 			COMPAT_XT_ALIGN(sizeof(struct compat_ebt_entry_mwt));
1593 }
1594 
1595 static int ebt_compat_match_offset(const struct xt_match *match,
1596 				   unsigned int userlen)
1597 {
1598 	/*
1599 	 * ebt_among needs special handling. The kernel .matchsize is
1600 	 * set to -1 at registration time; at runtime an EBT_ALIGN()ed
1601 	 * value is expected.
1602 	 * Example: userspace sends 4500, ebt_among.c wants 4504.
1603 	 */
1604 	if (unlikely(match->matchsize == -1))
1605 		return XT_ALIGN(userlen) - COMPAT_XT_ALIGN(userlen);
1606 	return xt_compat_match_offset(match);
1607 }
1608 
1609 static int compat_match_to_user(struct ebt_entry_match *m, void __user **dstptr,
1610 				unsigned int *size)
1611 {
1612 	const struct xt_match *match = m->u.match;
1613 	struct compat_ebt_entry_mwt __user *cm = *dstptr;
1614 	int off = ebt_compat_match_offset(match, m->match_size);
1615 	compat_uint_t msize = m->match_size - off;
1616 
1617 	BUG_ON(off >= m->match_size);
1618 
1619 	if (copy_to_user(cm->u.name, match->name,
1620 	    strlen(match->name) + 1) || put_user(msize, &cm->match_size))
1621 		return -EFAULT;
1622 
1623 	if (match->compat_to_user) {
1624 		if (match->compat_to_user(cm->data, m->data))
1625 			return -EFAULT;
1626 	} else if (copy_to_user(cm->data, m->data, msize))
1627 			return -EFAULT;
1628 
1629 	*size -= ebt_compat_entry_padsize() + off;
1630 	*dstptr = cm->data;
1631 	*dstptr += msize;
1632 	return 0;
1633 }
1634 
1635 static int compat_target_to_user(struct ebt_entry_target *t,
1636 				 void __user **dstptr,
1637 				 unsigned int *size)
1638 {
1639 	const struct xt_target *target = t->u.target;
1640 	struct compat_ebt_entry_mwt __user *cm = *dstptr;
1641 	int off = xt_compat_target_offset(target);
1642 	compat_uint_t tsize = t->target_size - off;
1643 
1644 	BUG_ON(off >= t->target_size);
1645 
1646 	if (copy_to_user(cm->u.name, target->name,
1647 	    strlen(target->name) + 1) || put_user(tsize, &cm->match_size))
1648 		return -EFAULT;
1649 
1650 	if (target->compat_to_user) {
1651 		if (target->compat_to_user(cm->data, t->data))
1652 			return -EFAULT;
1653 	} else if (copy_to_user(cm->data, t->data, tsize))
1654 		return -EFAULT;
1655 
1656 	*size -= ebt_compat_entry_padsize() + off;
1657 	*dstptr = cm->data;
1658 	*dstptr += tsize;
1659 	return 0;
1660 }
1661 
1662 static int compat_watcher_to_user(struct ebt_entry_watcher *w,
1663 				  void __user **dstptr,
1664 				  unsigned int *size)
1665 {
1666 	return compat_target_to_user((struct ebt_entry_target *)w,
1667 							dstptr, size);
1668 }
1669 
1670 static int compat_copy_entry_to_user(struct ebt_entry *e, void __user **dstptr,
1671 				unsigned int *size)
1672 {
1673 	struct ebt_entry_target *t;
1674 	struct ebt_entry __user *ce;
1675 	u32 watchers_offset, target_offset, next_offset;
1676 	compat_uint_t origsize;
1677 	int ret;
1678 
1679 	if (e->bitmask == 0) {
1680 		if (*size < sizeof(struct ebt_entries))
1681 			return -EINVAL;
1682 		if (copy_to_user(*dstptr, e, sizeof(struct ebt_entries)))
1683 			return -EFAULT;
1684 
1685 		*dstptr += sizeof(struct ebt_entries);
1686 		*size -= sizeof(struct ebt_entries);
1687 		return 0;
1688 	}
1689 
1690 	if (*size < sizeof(*ce))
1691 		return -EINVAL;
1692 
1693 	ce = (struct ebt_entry __user *)*dstptr;
1694 	if (copy_to_user(ce, e, sizeof(*ce)))
1695 		return -EFAULT;
1696 
1697 	origsize = *size;
1698 	*dstptr += sizeof(*ce);
1699 
1700 	ret = EBT_MATCH_ITERATE(e, compat_match_to_user, dstptr, size);
1701 	if (ret)
1702 		return ret;
1703 	watchers_offset = e->watchers_offset - (origsize - *size);
1704 
1705 	ret = EBT_WATCHER_ITERATE(e, compat_watcher_to_user, dstptr, size);
1706 	if (ret)
1707 		return ret;
1708 	target_offset = e->target_offset - (origsize - *size);
1709 
1710 	t = (struct ebt_entry_target *) ((char *) e + e->target_offset);
1711 
1712 	ret = compat_target_to_user(t, dstptr, size);
1713 	if (ret)
1714 		return ret;
1715 	next_offset = e->next_offset - (origsize - *size);
1716 
1717 	if (put_user(watchers_offset, &ce->watchers_offset) ||
1718 	    put_user(target_offset, &ce->target_offset) ||
1719 	    put_user(next_offset, &ce->next_offset))
1720 		return -EFAULT;
1721 
1722 	*size -= sizeof(*ce);
1723 	return 0;
1724 }
1725 
1726 static int compat_calc_match(struct ebt_entry_match *m, int *off)
1727 {
1728 	*off += ebt_compat_match_offset(m->u.match, m->match_size);
1729 	*off += ebt_compat_entry_padsize();
1730 	return 0;
1731 }
1732 
1733 static int compat_calc_watcher(struct ebt_entry_watcher *w, int *off)
1734 {
1735 	*off += xt_compat_target_offset(w->u.watcher);
1736 	*off += ebt_compat_entry_padsize();
1737 	return 0;
1738 }
1739 
1740 static int compat_calc_entry(const struct ebt_entry *e,
1741 			     const struct ebt_table_info *info,
1742 			     const void *base,
1743 			     struct compat_ebt_replace *newinfo)
1744 {
1745 	const struct ebt_entry_target *t;
1746 	unsigned int entry_offset;
1747 	int off, ret, i;
1748 
1749 	if (e->bitmask == 0)
1750 		return 0;
1751 
1752 	off = 0;
1753 	entry_offset = (void *)e - base;
1754 
1755 	EBT_MATCH_ITERATE(e, compat_calc_match, &off);
1756 	EBT_WATCHER_ITERATE(e, compat_calc_watcher, &off);
1757 
1758 	t = (const struct ebt_entry_target *) ((char *) e + e->target_offset);
1759 
1760 	off += xt_compat_target_offset(t->u.target);
1761 	off += ebt_compat_entry_padsize();
1762 
1763 	newinfo->entries_size -= off;
1764 
1765 	ret = xt_compat_add_offset(NFPROTO_BRIDGE, entry_offset, off);
1766 	if (ret)
1767 		return ret;
1768 
1769 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
1770 		const void *hookptr = info->hook_entry[i];
1771 		if (info->hook_entry[i] &&
1772 		    (e < (struct ebt_entry *)(base - hookptr))) {
1773 			newinfo->hook_entry[i] -= off;
1774 			pr_debug("0x%08X -> 0x%08X\n",
1775 					newinfo->hook_entry[i] + off,
1776 					newinfo->hook_entry[i]);
1777 		}
1778 	}
1779 
1780 	return 0;
1781 }
1782 
1783 
1784 static int compat_table_info(const struct ebt_table_info *info,
1785 			     struct compat_ebt_replace *newinfo)
1786 {
1787 	unsigned int size = info->entries_size;
1788 	const void *entries = info->entries;
1789 
1790 	newinfo->entries_size = size;
1791 
1792 	xt_compat_init_offsets(NFPROTO_BRIDGE, info->nentries);
1793 	return EBT_ENTRY_ITERATE(entries, size, compat_calc_entry, info,
1794 							entries, newinfo);
1795 }
1796 
1797 static int compat_copy_everything_to_user(struct ebt_table *t,
1798 					  void __user *user, int *len, int cmd)
1799 {
1800 	struct compat_ebt_replace repl, tmp;
1801 	struct ebt_counter *oldcounters;
1802 	struct ebt_table_info tinfo;
1803 	int ret;
1804 	void __user *pos;
1805 
1806 	memset(&tinfo, 0, sizeof(tinfo));
1807 
1808 	if (cmd == EBT_SO_GET_ENTRIES) {
1809 		tinfo.entries_size = t->private->entries_size;
1810 		tinfo.nentries = t->private->nentries;
1811 		tinfo.entries = t->private->entries;
1812 		oldcounters = t->private->counters;
1813 	} else {
1814 		tinfo.entries_size = t->table->entries_size;
1815 		tinfo.nentries = t->table->nentries;
1816 		tinfo.entries = t->table->entries;
1817 		oldcounters = t->table->counters;
1818 	}
1819 
1820 	if (copy_from_user(&tmp, user, sizeof(tmp)))
1821 		return -EFAULT;
1822 
1823 	if (tmp.nentries != tinfo.nentries ||
1824 	   (tmp.num_counters && tmp.num_counters != tinfo.nentries))
1825 		return -EINVAL;
1826 
1827 	memcpy(&repl, &tmp, sizeof(repl));
1828 	if (cmd == EBT_SO_GET_ENTRIES)
1829 		ret = compat_table_info(t->private, &repl);
1830 	else
1831 		ret = compat_table_info(&tinfo, &repl);
1832 	if (ret)
1833 		return ret;
1834 
1835 	if (*len != sizeof(tmp) + repl.entries_size +
1836 	   (tmp.num_counters? tinfo.nentries * sizeof(struct ebt_counter): 0)) {
1837 		pr_err("wrong size: *len %d, entries_size %u, replsz %d\n",
1838 				*len, tinfo.entries_size, repl.entries_size);
1839 		return -EINVAL;
1840 	}
1841 
1842 	/* userspace might not need the counters */
1843 	ret = copy_counters_to_user(t, oldcounters, compat_ptr(tmp.counters),
1844 					tmp.num_counters, tinfo.nentries);
1845 	if (ret)
1846 		return ret;
1847 
1848 	pos = compat_ptr(tmp.entries);
1849 	return EBT_ENTRY_ITERATE(tinfo.entries, tinfo.entries_size,
1850 			compat_copy_entry_to_user, &pos, &tmp.entries_size);
1851 }
1852 
1853 struct ebt_entries_buf_state {
1854 	char *buf_kern_start;	/* kernel buffer to copy (translated) data to */
1855 	u32 buf_kern_len;	/* total size of kernel buffer */
1856 	u32 buf_kern_offset;	/* amount of data copied so far */
1857 	u32 buf_user_offset;	/* read position in userspace buffer */
1858 };
1859 
1860 static int ebt_buf_count(struct ebt_entries_buf_state *state, unsigned int sz)
1861 {
1862 	state->buf_kern_offset += sz;
1863 	return state->buf_kern_offset >= sz ? 0 : -EINVAL;
1864 }
1865 
1866 static int ebt_buf_add(struct ebt_entries_buf_state *state,
1867 		       void *data, unsigned int sz)
1868 {
1869 	if (state->buf_kern_start == NULL)
1870 		goto count_only;
1871 
1872 	BUG_ON(state->buf_kern_offset + sz > state->buf_kern_len);
1873 
1874 	memcpy(state->buf_kern_start + state->buf_kern_offset, data, sz);
1875 
1876  count_only:
1877 	state->buf_user_offset += sz;
1878 	return ebt_buf_count(state, sz);
1879 }
1880 
1881 static int ebt_buf_add_pad(struct ebt_entries_buf_state *state, unsigned int sz)
1882 {
1883 	char *b = state->buf_kern_start;
1884 
1885 	BUG_ON(b && state->buf_kern_offset > state->buf_kern_len);
1886 
1887 	if (b != NULL && sz > 0)
1888 		memset(b + state->buf_kern_offset, 0, sz);
1889 	/* do not adjust ->buf_user_offset here, we added kernel-side padding */
1890 	return ebt_buf_count(state, sz);
1891 }
1892 
1893 enum compat_mwt {
1894 	EBT_COMPAT_MATCH,
1895 	EBT_COMPAT_WATCHER,
1896 	EBT_COMPAT_TARGET,
1897 };
1898 
1899 static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt,
1900 				enum compat_mwt compat_mwt,
1901 				struct ebt_entries_buf_state *state,
1902 				const unsigned char *base)
1903 {
1904 	char name[EBT_FUNCTION_MAXNAMELEN];
1905 	struct xt_match *match;
1906 	struct xt_target *wt;
1907 	void *dst = NULL;
1908 	int off, pad = 0;
1909 	unsigned int size_kern, match_size = mwt->match_size;
1910 
1911 	strlcpy(name, mwt->u.name, sizeof(name));
1912 
1913 	if (state->buf_kern_start)
1914 		dst = state->buf_kern_start + state->buf_kern_offset;
1915 
1916 	switch (compat_mwt) {
1917 	case EBT_COMPAT_MATCH:
1918 		match = xt_request_find_match(NFPROTO_BRIDGE, name, 0);
1919 		if (IS_ERR(match))
1920 			return PTR_ERR(match);
1921 
1922 		off = ebt_compat_match_offset(match, match_size);
1923 		if (dst) {
1924 			if (match->compat_from_user)
1925 				match->compat_from_user(dst, mwt->data);
1926 			else
1927 				memcpy(dst, mwt->data, match_size);
1928 		}
1929 
1930 		size_kern = match->matchsize;
1931 		if (unlikely(size_kern == -1))
1932 			size_kern = match_size;
1933 		module_put(match->me);
1934 		break;
1935 	case EBT_COMPAT_WATCHER: /* fallthrough */
1936 	case EBT_COMPAT_TARGET:
1937 		wt = xt_request_find_target(NFPROTO_BRIDGE, name, 0);
1938 		if (IS_ERR(wt))
1939 			return PTR_ERR(wt);
1940 		off = xt_compat_target_offset(wt);
1941 
1942 		if (dst) {
1943 			if (wt->compat_from_user)
1944 				wt->compat_from_user(dst, mwt->data);
1945 			else
1946 				memcpy(dst, mwt->data, match_size);
1947 		}
1948 
1949 		size_kern = wt->targetsize;
1950 		module_put(wt->me);
1951 		break;
1952 
1953 	default:
1954 		return -EINVAL;
1955 	}
1956 
1957 	state->buf_kern_offset += match_size + off;
1958 	state->buf_user_offset += match_size;
1959 	pad = XT_ALIGN(size_kern) - size_kern;
1960 
1961 	if (pad > 0 && dst) {
1962 		BUG_ON(state->buf_kern_len <= pad);
1963 		BUG_ON(state->buf_kern_offset - (match_size + off) + size_kern > state->buf_kern_len - pad);
1964 		memset(dst + size_kern, 0, pad);
1965 	}
1966 	return off + match_size;
1967 }
1968 
1969 /*
1970  * return size of all matches, watchers or target, including necessary
1971  * alignment and padding.
1972  */
1973 static int ebt_size_mwt(struct compat_ebt_entry_mwt *match32,
1974 			unsigned int size_left, enum compat_mwt type,
1975 			struct ebt_entries_buf_state *state, const void *base)
1976 {
1977 	int growth = 0;
1978 	char *buf;
1979 
1980 	if (size_left == 0)
1981 		return 0;
1982 
1983 	buf = (char *) match32;
1984 
1985 	while (size_left >= sizeof(*match32)) {
1986 		struct ebt_entry_match *match_kern;
1987 		int ret;
1988 
1989 		match_kern = (struct ebt_entry_match *) state->buf_kern_start;
1990 		if (match_kern) {
1991 			char *tmp;
1992 			tmp = state->buf_kern_start + state->buf_kern_offset;
1993 			match_kern = (struct ebt_entry_match *) tmp;
1994 		}
1995 		ret = ebt_buf_add(state, buf, sizeof(*match32));
1996 		if (ret < 0)
1997 			return ret;
1998 		size_left -= sizeof(*match32);
1999 
2000 		/* add padding before match->data (if any) */
2001 		ret = ebt_buf_add_pad(state, ebt_compat_entry_padsize());
2002 		if (ret < 0)
2003 			return ret;
2004 
2005 		if (match32->match_size > size_left)
2006 			return -EINVAL;
2007 
2008 		size_left -= match32->match_size;
2009 
2010 		ret = compat_mtw_from_user(match32, type, state, base);
2011 		if (ret < 0)
2012 			return ret;
2013 
2014 		BUG_ON(ret < match32->match_size);
2015 		growth += ret - match32->match_size;
2016 		growth += ebt_compat_entry_padsize();
2017 
2018 		buf += sizeof(*match32);
2019 		buf += match32->match_size;
2020 
2021 		if (match_kern)
2022 			match_kern->match_size = ret;
2023 
2024 		WARN_ON(type == EBT_COMPAT_TARGET && size_left);
2025 		match32 = (struct compat_ebt_entry_mwt *) buf;
2026 	}
2027 
2028 	return growth;
2029 }
2030 
2031 /* called for all ebt_entry structures. */
2032 static int size_entry_mwt(struct ebt_entry *entry, const unsigned char *base,
2033 			  unsigned int *total,
2034 			  struct ebt_entries_buf_state *state)
2035 {
2036 	unsigned int i, j, startoff, new_offset = 0;
2037 	/* stores match/watchers/targets & offset of next struct ebt_entry: */
2038 	unsigned int offsets[4];
2039 	unsigned int *offsets_update = NULL;
2040 	int ret;
2041 	char *buf_start;
2042 
2043 	if (*total < sizeof(struct ebt_entries))
2044 		return -EINVAL;
2045 
2046 	if (!entry->bitmask) {
2047 		*total -= sizeof(struct ebt_entries);
2048 		return ebt_buf_add(state, entry, sizeof(struct ebt_entries));
2049 	}
2050 	if (*total < sizeof(*entry) || entry->next_offset < sizeof(*entry))
2051 		return -EINVAL;
2052 
2053 	startoff = state->buf_user_offset;
2054 	/* pull in most part of ebt_entry, it does not need to be changed. */
2055 	ret = ebt_buf_add(state, entry,
2056 			offsetof(struct ebt_entry, watchers_offset));
2057 	if (ret < 0)
2058 		return ret;
2059 
2060 	offsets[0] = sizeof(struct ebt_entry); /* matches come first */
2061 	memcpy(&offsets[1], &entry->watchers_offset,
2062 			sizeof(offsets) - sizeof(offsets[0]));
2063 
2064 	if (state->buf_kern_start) {
2065 		buf_start = state->buf_kern_start + state->buf_kern_offset;
2066 		offsets_update = (unsigned int *) buf_start;
2067 	}
2068 	ret = ebt_buf_add(state, &offsets[1],
2069 			sizeof(offsets) - sizeof(offsets[0]));
2070 	if (ret < 0)
2071 		return ret;
2072 	buf_start = (char *) entry;
2073 	/*
2074 	 * 0: matches offset, always follows ebt_entry.
2075 	 * 1: watchers offset, from ebt_entry structure
2076 	 * 2: target offset, from ebt_entry structure
2077 	 * 3: next ebt_entry offset, from ebt_entry structure
2078 	 *
2079 	 * offsets are relative to beginning of struct ebt_entry (i.e., 0).
2080 	 */
2081 	for (i = 0, j = 1 ; j < 4 ; j++, i++) {
2082 		struct compat_ebt_entry_mwt *match32;
2083 		unsigned int size;
2084 		char *buf = buf_start;
2085 
2086 		buf = buf_start + offsets[i];
2087 		if (offsets[i] > offsets[j])
2088 			return -EINVAL;
2089 
2090 		match32 = (struct compat_ebt_entry_mwt *) buf;
2091 		size = offsets[j] - offsets[i];
2092 		ret = ebt_size_mwt(match32, size, i, state, base);
2093 		if (ret < 0)
2094 			return ret;
2095 		new_offset += ret;
2096 		if (offsets_update && new_offset) {
2097 			pr_debug("change offset %d to %d\n",
2098 				offsets_update[i], offsets[j] + new_offset);
2099 			offsets_update[i] = offsets[j] + new_offset;
2100 		}
2101 	}
2102 
2103 	if (state->buf_kern_start == NULL) {
2104 		unsigned int offset = buf_start - (char *) base;
2105 
2106 		ret = xt_compat_add_offset(NFPROTO_BRIDGE, offset, new_offset);
2107 		if (ret < 0)
2108 			return ret;
2109 	}
2110 
2111 	startoff = state->buf_user_offset - startoff;
2112 
2113 	BUG_ON(*total < startoff);
2114 	*total -= startoff;
2115 	return 0;
2116 }
2117 
2118 /*
2119  * repl->entries_size is the size of the ebt_entry blob in userspace.
2120  * It might need more memory when copied to a 64 bit kernel in case
2121  * userspace is 32-bit. So, first task: find out how much memory is needed.
2122  *
2123  * Called before validation is performed.
2124  */
2125 static int compat_copy_entries(unsigned char *data, unsigned int size_user,
2126 				struct ebt_entries_buf_state *state)
2127 {
2128 	unsigned int size_remaining = size_user;
2129 	int ret;
2130 
2131 	ret = EBT_ENTRY_ITERATE(data, size_user, size_entry_mwt, data,
2132 					&size_remaining, state);
2133 	if (ret < 0)
2134 		return ret;
2135 
2136 	WARN_ON(size_remaining);
2137 	return state->buf_kern_offset;
2138 }
2139 
2140 
2141 static int compat_copy_ebt_replace_from_user(struct ebt_replace *repl,
2142 					    void __user *user, unsigned int len)
2143 {
2144 	struct compat_ebt_replace tmp;
2145 	int i;
2146 
2147 	if (len < sizeof(tmp))
2148 		return -EINVAL;
2149 
2150 	if (copy_from_user(&tmp, user, sizeof(tmp)))
2151 		return -EFAULT;
2152 
2153 	if (len != sizeof(tmp) + tmp.entries_size)
2154 		return -EINVAL;
2155 
2156 	if (tmp.entries_size == 0)
2157 		return -EINVAL;
2158 
2159 	if (tmp.nentries >= ((INT_MAX - sizeof(struct ebt_table_info)) /
2160 			NR_CPUS - SMP_CACHE_BYTES) / sizeof(struct ebt_counter))
2161 		return -ENOMEM;
2162 	if (tmp.num_counters >= INT_MAX / sizeof(struct ebt_counter))
2163 		return -ENOMEM;
2164 
2165 	memcpy(repl, &tmp, offsetof(struct ebt_replace, hook_entry));
2166 
2167 	/* starting with hook_entry, 32 vs. 64 bit structures are different */
2168 	for (i = 0; i < NF_BR_NUMHOOKS; i++)
2169 		repl->hook_entry[i] = compat_ptr(tmp.hook_entry[i]);
2170 
2171 	repl->num_counters = tmp.num_counters;
2172 	repl->counters = compat_ptr(tmp.counters);
2173 	repl->entries = compat_ptr(tmp.entries);
2174 	return 0;
2175 }
2176 
2177 static int compat_do_replace(struct net *net, void __user *user,
2178 			     unsigned int len)
2179 {
2180 	int ret, i, countersize, size64;
2181 	struct ebt_table_info *newinfo;
2182 	struct ebt_replace tmp;
2183 	struct ebt_entries_buf_state state;
2184 	void *entries_tmp;
2185 
2186 	ret = compat_copy_ebt_replace_from_user(&tmp, user, len);
2187 	if (ret) {
2188 		/* try real handler in case userland supplied needed padding */
2189 		if (ret == -EINVAL && do_replace(net, user, len) == 0)
2190 			ret = 0;
2191 		return ret;
2192 	}
2193 
2194 	countersize = COUNTER_OFFSET(tmp.nentries) * nr_cpu_ids;
2195 	newinfo = vmalloc(sizeof(*newinfo) + countersize);
2196 	if (!newinfo)
2197 		return -ENOMEM;
2198 
2199 	if (countersize)
2200 		memset(newinfo->counters, 0, countersize);
2201 
2202 	memset(&state, 0, sizeof(state));
2203 
2204 	newinfo->entries = vmalloc(tmp.entries_size);
2205 	if (!newinfo->entries) {
2206 		ret = -ENOMEM;
2207 		goto free_newinfo;
2208 	}
2209 	if (copy_from_user(
2210 	   newinfo->entries, tmp.entries, tmp.entries_size) != 0) {
2211 		ret = -EFAULT;
2212 		goto free_entries;
2213 	}
2214 
2215 	entries_tmp = newinfo->entries;
2216 
2217 	xt_compat_lock(NFPROTO_BRIDGE);
2218 
2219 	xt_compat_init_offsets(NFPROTO_BRIDGE, tmp.nentries);
2220 	ret = compat_copy_entries(entries_tmp, tmp.entries_size, &state);
2221 	if (ret < 0)
2222 		goto out_unlock;
2223 
2224 	pr_debug("tmp.entries_size %d, kern off %d, user off %d delta %d\n",
2225 		tmp.entries_size, state.buf_kern_offset, state.buf_user_offset,
2226 		xt_compat_calc_jump(NFPROTO_BRIDGE, tmp.entries_size));
2227 
2228 	size64 = ret;
2229 	newinfo->entries = vmalloc(size64);
2230 	if (!newinfo->entries) {
2231 		vfree(entries_tmp);
2232 		ret = -ENOMEM;
2233 		goto out_unlock;
2234 	}
2235 
2236 	memset(&state, 0, sizeof(state));
2237 	state.buf_kern_start = newinfo->entries;
2238 	state.buf_kern_len = size64;
2239 
2240 	ret = compat_copy_entries(entries_tmp, tmp.entries_size, &state);
2241 	BUG_ON(ret < 0);	/* parses same data again */
2242 
2243 	vfree(entries_tmp);
2244 	tmp.entries_size = size64;
2245 
2246 	for (i = 0; i < NF_BR_NUMHOOKS; i++) {
2247 		char __user *usrptr;
2248 		if (tmp.hook_entry[i]) {
2249 			unsigned int delta;
2250 			usrptr = (char __user *) tmp.hook_entry[i];
2251 			delta = usrptr - tmp.entries;
2252 			usrptr += xt_compat_calc_jump(NFPROTO_BRIDGE, delta);
2253 			tmp.hook_entry[i] = (struct ebt_entries __user *)usrptr;
2254 		}
2255 	}
2256 
2257 	xt_compat_flush_offsets(NFPROTO_BRIDGE);
2258 	xt_compat_unlock(NFPROTO_BRIDGE);
2259 
2260 	ret = do_replace_finish(net, &tmp, newinfo);
2261 	if (ret == 0)
2262 		return ret;
2263 free_entries:
2264 	vfree(newinfo->entries);
2265 free_newinfo:
2266 	vfree(newinfo);
2267 	return ret;
2268 out_unlock:
2269 	xt_compat_flush_offsets(NFPROTO_BRIDGE);
2270 	xt_compat_unlock(NFPROTO_BRIDGE);
2271 	goto free_entries;
2272 }
2273 
2274 static int compat_update_counters(struct net *net, void __user *user,
2275 				  unsigned int len)
2276 {
2277 	struct compat_ebt_replace hlp;
2278 
2279 	if (copy_from_user(&hlp, user, sizeof(hlp)))
2280 		return -EFAULT;
2281 
2282 	/* try real handler in case userland supplied needed padding */
2283 	if (len != sizeof(hlp) + hlp.num_counters * sizeof(struct ebt_counter))
2284 		return update_counters(net, user, len);
2285 
2286 	return do_update_counters(net, hlp.name, compat_ptr(hlp.counters),
2287 					hlp.num_counters, user, len);
2288 }
2289 
2290 static int compat_do_ebt_set_ctl(struct sock *sk,
2291 		int cmd, void __user *user, unsigned int len)
2292 {
2293 	int ret;
2294 	struct net *net = sock_net(sk);
2295 
2296 	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
2297 		return -EPERM;
2298 
2299 	switch (cmd) {
2300 	case EBT_SO_SET_ENTRIES:
2301 		ret = compat_do_replace(net, user, len);
2302 		break;
2303 	case EBT_SO_SET_COUNTERS:
2304 		ret = compat_update_counters(net, user, len);
2305 		break;
2306 	default:
2307 		ret = -EINVAL;
2308   }
2309 	return ret;
2310 }
2311 
2312 static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
2313 		void __user *user, int *len)
2314 {
2315 	int ret;
2316 	struct compat_ebt_replace tmp;
2317 	struct ebt_table *t;
2318 	struct net *net = sock_net(sk);
2319 
2320 	if (!ns_capable(net->user_ns, CAP_NET_ADMIN))
2321 		return -EPERM;
2322 
2323 	/* try real handler in case userland supplied needed padding */
2324 	if ((cmd == EBT_SO_GET_INFO ||
2325 	     cmd == EBT_SO_GET_INIT_INFO) && *len != sizeof(tmp))
2326 			return do_ebt_get_ctl(sk, cmd, user, len);
2327 
2328 	if (copy_from_user(&tmp, user, sizeof(tmp)))
2329 		return -EFAULT;
2330 
2331 	t = find_table_lock(net, tmp.name, &ret, &ebt_mutex);
2332 	if (!t)
2333 		return ret;
2334 
2335 	xt_compat_lock(NFPROTO_BRIDGE);
2336 	switch (cmd) {
2337 	case EBT_SO_GET_INFO:
2338 		tmp.nentries = t->private->nentries;
2339 		ret = compat_table_info(t->private, &tmp);
2340 		if (ret)
2341 			goto out;
2342 		tmp.valid_hooks = t->valid_hooks;
2343 
2344 		if (copy_to_user(user, &tmp, *len) != 0) {
2345 			ret = -EFAULT;
2346 			break;
2347 		}
2348 		ret = 0;
2349 		break;
2350 	case EBT_SO_GET_INIT_INFO:
2351 		tmp.nentries = t->table->nentries;
2352 		tmp.entries_size = t->table->entries_size;
2353 		tmp.valid_hooks = t->table->valid_hooks;
2354 
2355 		if (copy_to_user(user, &tmp, *len) != 0) {
2356 			ret = -EFAULT;
2357 			break;
2358 		}
2359 		ret = 0;
2360 		break;
2361 	case EBT_SO_GET_ENTRIES:
2362 	case EBT_SO_GET_INIT_ENTRIES:
2363 		/*
2364 		 * try real handler first in case of userland-side padding.
2365 		 * in case we are dealing with an 'ordinary' 32 bit binary
2366 		 * without 64bit compatibility padding, this will fail right
2367 		 * after copy_from_user when the *len argument is validated.
2368 		 *
2369 		 * the compat_ variant needs to do one pass over the kernel
2370 		 * data set to adjust for size differences before it the check.
2371 		 */
2372 		if (copy_everything_to_user(t, user, len, cmd) == 0)
2373 			ret = 0;
2374 		else
2375 			ret = compat_copy_everything_to_user(t, user, len, cmd);
2376 		break;
2377 	default:
2378 		ret = -EINVAL;
2379 	}
2380  out:
2381 	xt_compat_flush_offsets(NFPROTO_BRIDGE);
2382 	xt_compat_unlock(NFPROTO_BRIDGE);
2383 	mutex_unlock(&ebt_mutex);
2384 	return ret;
2385 }
2386 #endif
2387 
2388 static struct nf_sockopt_ops ebt_sockopts = {
2389 	.pf		= PF_INET,
2390 	.set_optmin	= EBT_BASE_CTL,
2391 	.set_optmax	= EBT_SO_SET_MAX + 1,
2392 	.set		= do_ebt_set_ctl,
2393 #ifdef CONFIG_COMPAT
2394 	.compat_set	= compat_do_ebt_set_ctl,
2395 #endif
2396 	.get_optmin	= EBT_BASE_CTL,
2397 	.get_optmax	= EBT_SO_GET_MAX + 1,
2398 	.get		= do_ebt_get_ctl,
2399 #ifdef CONFIG_COMPAT
2400 	.compat_get	= compat_do_ebt_get_ctl,
2401 #endif
2402 	.owner		= THIS_MODULE,
2403 };
2404 
2405 static int __init ebtables_init(void)
2406 {
2407 	int ret;
2408 
2409 	ret = xt_register_target(&ebt_standard_target);
2410 	if (ret < 0)
2411 		return ret;
2412 	ret = nf_register_sockopt(&ebt_sockopts);
2413 	if (ret < 0) {
2414 		xt_unregister_target(&ebt_standard_target);
2415 		return ret;
2416 	}
2417 
2418 	printk(KERN_INFO "Ebtables v2.0 registered\n");
2419 	return 0;
2420 }
2421 
2422 static void __exit ebtables_fini(void)
2423 {
2424 	nf_unregister_sockopt(&ebt_sockopts);
2425 	xt_unregister_target(&ebt_standard_target);
2426 	printk(KERN_INFO "Ebtables v2.0 unregistered\n");
2427 }
2428 
2429 EXPORT_SYMBOL(ebt_register_table);
2430 EXPORT_SYMBOL(ebt_unregister_table);
2431 EXPORT_SYMBOL(ebt_do_table);
2432 module_init(ebtables_init);
2433 module_exit(ebtables_fini);
2434 MODULE_LICENSE("GPL");
2435