netfilter: xtables: provide invoked family value to extensions
By passing in the family through which extensions were invoked, a bit of data space can be reclaimed. The "family" member will be added to the parameter structures and the check functions be adjusted. Signed-off-by: Jan Engelhardt <jengelh@medozas.de> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
committed by
Patrick McHardy
parent
a2df1648ba
commit
916a917dfe
@@ -370,6 +370,7 @@ ip6t_do_table(struct sk_buff *skb,
|
||||
mtpar.hotdrop = &hotdrop;
|
||||
mtpar.in = tgpar.in = in;
|
||||
mtpar.out = tgpar.out = out;
|
||||
mtpar.family = tgpar.family = NFPROTO_IPV6;
|
||||
tgpar.hooknum = hook;
|
||||
|
||||
read_lock_bh(&table->lock);
|
||||
@@ -604,6 +605,7 @@ cleanup_match(struct ip6t_entry_match *m, unsigned int *i)
|
||||
|
||||
par.match = m->u.kernel.match;
|
||||
par.matchinfo = m->data;
|
||||
par.family = NFPROTO_IPV6;
|
||||
if (par.match->destroy != NULL)
|
||||
par.match->destroy(&par);
|
||||
module_put(par.match->me);
|
||||
@@ -640,7 +642,7 @@ static int check_match(struct ip6t_entry_match *m, struct xt_mtchk_param *par,
|
||||
par->match = m->u.kernel.match;
|
||||
par->matchinfo = m->data;
|
||||
|
||||
ret = xt_check_match(par, NFPROTO_IPV6, m->u.match_size - sizeof(*m),
|
||||
ret = xt_check_match(par, m->u.match_size - sizeof(*m),
|
||||
ipv6->proto, ipv6->invflags & IP6T_INV_PROTO);
|
||||
if (ret < 0) {
|
||||
duprintf("ip_tables: check failed for `%s'.\n",
|
||||
@@ -686,11 +688,12 @@ static int check_target(struct ip6t_entry *e, const char *name)
|
||||
.target = t->u.kernel.target,
|
||||
.targinfo = t->data,
|
||||
.hook_mask = e->comefrom,
|
||||
.family = NFPROTO_IPV6,
|
||||
};
|
||||
int ret;
|
||||
|
||||
t = ip6t_get_target(e);
|
||||
ret = xt_check_target(&par, NFPROTO_IPV6, t->u.target_size - sizeof(*t),
|
||||
ret = xt_check_target(&par, t->u.target_size - sizeof(*t),
|
||||
e->ipv6.proto, e->ipv6.invflags & IP6T_INV_PROTO);
|
||||
if (ret < 0) {
|
||||
duprintf("ip_tables: check failed for `%s'.\n",
|
||||
@@ -718,6 +721,7 @@ find_check_entry(struct ip6t_entry *e, const char *name, unsigned int size,
|
||||
mtpar.table = name;
|
||||
mtpar.entryinfo = &e->ipv6;
|
||||
mtpar.hook_mask = e->comefrom;
|
||||
mtpar.family = NFPROTO_IPV6;
|
||||
ret = IP6T_MATCH_ITERATE(e, find_check_match, &mtpar, &j);
|
||||
if (ret != 0)
|
||||
goto cleanup_matches;
|
||||
@@ -805,6 +809,7 @@ cleanup_entry(struct ip6t_entry *e, unsigned int *i)
|
||||
|
||||
par.target = t->u.kernel.target;
|
||||
par.targinfo = t->data;
|
||||
par.family = NFPROTO_IPV6;
|
||||
if (par.target->destroy != NULL)
|
||||
par.target->destroy(&par);
|
||||
module_put(par.target->me);
|
||||
@@ -1685,6 +1690,7 @@ static int compat_check_entry(struct ip6t_entry *e, const char *name,
|
||||
mtpar.table = name;
|
||||
mtpar.entryinfo = &e->ipv6;
|
||||
mtpar.hook_mask = e->comefrom;
|
||||
mtpar.family = NFPROTO_IPV6;
|
||||
ret = IP6T_MATCH_ITERATE(e, check_match, &mtpar, &j);
|
||||
if (ret)
|
||||
goto cleanup_matches;
|
||||
|
Reference in New Issue
Block a user