Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29edbc3e authored by Stefano Brivio's avatar Stefano Brivio Committed by Jozsef Kadlecsik
Browse files

netfilter: ipset: Make invalid MAC address checks consistent



Set types bitmap:ipmac and hash:ipmac check that MAC addresses
are not all zeroes.

Introduce one missing check, and make the remaining ones
consistent, using is_zero_ether_addr() instead of comparing
against an array containing zeroes.

This was already done for hash:mac sets in commit 26c97c5d
("netfilter: ipset: Use is_zero_ether_addr instead of static and
memcmp").

Signed-off-by: default avatarStefano Brivio <sbrivio@redhat.com>
Signed-off-by: default avatarJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
parent 8cc4ccf5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -235,6 +235,9 @@ bitmap_ipmac_kadt(struct ip_set *set, const struct sk_buff *skb,
	else
		ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);

	if (is_zero_ether_addr(e.ether))
		return -EINVAL;

	return adtfn(set, &e, &ext, &opt->ext, opt->cmdflags);
}

+4 −7
Original line number Diff line number Diff line
@@ -36,9 +36,6 @@ MODULE_ALIAS("ip_set_hash:ip,mac");
/* Type specific function prefix */
#define HTYPE		hash_ipmac

/* Zero valued element is not supported */
static const unsigned char invalid_ether[ETH_ALEN] = { 0 };

/* IPv4 variant */

/* Member elements */
@@ -108,7 +105,7 @@ hash_ipmac4_kadt(struct ip_set *set, const struct sk_buff *skb,
	else
		ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);

	if (ether_addr_equal(e.ether, invalid_ether))
	if (is_zero_ether_addr(e.ether))
		return -EINVAL;

	ip4addrptr(skb, opt->flags & IPSET_DIM_ONE_SRC, &e.ip);
@@ -144,7 +141,7 @@ hash_ipmac4_uadt(struct ip_set *set, struct nlattr *tb[],
	if (ret)
		return ret;
	memcpy(e.ether, nla_data(tb[IPSET_ATTR_ETHER]), ETH_ALEN);
	if (ether_addr_equal(e.ether, invalid_ether))
	if (is_zero_ether_addr(e.ether))
		return -IPSET_ERR_HASH_ELEM;

	return adtfn(set, &e, &ext, &ext, flags);
@@ -224,7 +221,7 @@ hash_ipmac6_kadt(struct ip_set *set, const struct sk_buff *skb,
	else
		ether_addr_copy(e.ether, eth_hdr(skb)->h_dest);

	if (ether_addr_equal(e.ether, invalid_ether))
	if (is_zero_ether_addr(e.ether))
		return -EINVAL;

	ip6addrptr(skb, opt->flags & IPSET_DIM_ONE_SRC, &e.ip.in6);
@@ -264,7 +261,7 @@ hash_ipmac6_uadt(struct ip_set *set, struct nlattr *tb[],
		return ret;

	memcpy(e.ether, nla_data(tb[IPSET_ATTR_ETHER]), ETH_ALEN);
	if (ether_addr_equal(e.ether, invalid_ether))
	if (is_zero_ether_addr(e.ether))
		return -IPSET_ERR_HASH_ELEM;

	return adtfn(set, &e, &ext, &ext, flags);