Message ID | 1528123879-3698-1-git-send-email-florent.fourcot@wifirst.fr |
---|---|
State | Accepted |
Delegated to: | Jozsef Kadlecsik |
Headers | show |
Series | netfilter: ipset: forbid family for hash:mac sets | expand |
Hi, On Mon, 4 Jun 2018, Florent Fourcot wrote: > Userspace `ipset` command forbids family option for hash:mac type: > > ipset create test hash:mac family inet4 > ipset v6.30: Unknown argument: `family' > > However, this check is not done in kernel itself. When someone use > external netlink applications (pyroute2 python library for example), one > can create hash:mac with invalid family and inconsistant results from > userspace (`ipset` command cannot read set content anymore). > > This patch enforce the logic in kernel, and forbids insertion of > hash:mac with a family set. > > Since IP_SET_PROTO_UNDEF is defined only for hash:mac, this patch has no > impact on other hash:* sets > > Signed-off-by: Florent Fourcot <florent.fourcot@wifirst.fr> > Signed-off-by: Victorien Molle <victorien.molle@wifirst.fr> > --- > net/netfilter/ipset/ip_set_hash_gen.h | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) Patch is applied in the ipset git tree, thanks. Best regards, Jozsef - E-mail : kadlec@blackhole.kfki.hu, kadlecsik.jozsef@wigner.mta.hu PGP key : http://www.kfki.hu/~kadlec/pgp_public_key.txt Address : Wigner Research Centre for Physics, Hungarian Academy of Sciences H-1525 Budapest 114, POB. 49, Hungary -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h index bbad940c0137..8a33dac4e805 100644 --- a/net/netfilter/ipset/ip_set_hash_gen.h +++ b/net/netfilter/ipset/ip_set_hash_gen.h @@ -1234,7 +1234,10 @@ IPSET_TOKEN(HTYPE, _create)(struct net *net, struct ip_set *set, pr_debug("Create set %s with family %s\n", set->name, set->family == NFPROTO_IPV4 ? "inet" : "inet6"); -#ifndef IP_SET_PROTO_UNDEF +#ifdef IP_SET_PROTO_UNDEF + if (set->family != NFPROTO_UNSPEC) + return -IPSET_ERR_INVALID_FAMILY; +#else if (!(set->family == NFPROTO_IPV4 || set->family == NFPROTO_IPV6)) return -IPSET_ERR_INVALID_FAMILY; #endif