aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/netfilter/ebt_arp.c
diff options
context:
space:
mode:
authorJoe Perches <joe@perches.com>2016-06-24 11:32:26 -0700
committerPablo Neira Ayuso <pablo@netfilter.org>2016-07-01 16:37:06 +0200
commit4ae89ad92477219b504a49966ee010fe8dcb85af (patch)
tree6f276cd42d61899ce9f6952c87361c059295790f /net/bridge/netfilter/ebt_arp.c
parentnetfilter: x_tables: simplify ip{6}table_mangle_hook() (diff)
downloadlinux-dev-4ae89ad92477219b504a49966ee010fe8dcb85af.tar.xz
linux-dev-4ae89ad92477219b504a49966ee010fe8dcb85af.zip
etherdevice.h & bridge: netfilter: Add and use ether_addr_equal_masked
There are code duplications of a masked ethernet address comparison here so make it a separate function instead. Miscellanea: o Neaten alignment of FWINV macro uses to make it clearer for the reader Signed-off-by: Joe Perches <joe@perches.com> Acked-by: David S. Miller <davem@davemloft.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/bridge/netfilter/ebt_arp.c')
-rw-r--r--net/bridge/netfilter/ebt_arp.c17
1 files changed, 6 insertions, 11 deletions
diff --git a/net/bridge/netfilter/ebt_arp.c b/net/bridge/netfilter/ebt_arp.c
index cd457b891b27..cca0a899ee15 100644
--- a/net/bridge/netfilter/ebt_arp.c
+++ b/net/bridge/netfilter/ebt_arp.c
@@ -65,7 +65,6 @@ ebt_arp_mt(const struct sk_buff *skb, struct xt_action_param *par)
if (info->bitmask & (EBT_ARP_SRC_MAC | EBT_ARP_DST_MAC)) {
const unsigned char *mp;
unsigned char _mac[ETH_ALEN];
- uint8_t verdict, i;
if (ah->ar_hln != ETH_ALEN || ah->ar_hrd != htons(ARPHRD_ETHER))
return false;
@@ -74,11 +73,9 @@ ebt_arp_mt(const struct sk_buff *skb, struct xt_action_param *par)
sizeof(_mac), &_mac);
if (mp == NULL)
return false;
- verdict = 0;
- for (i = 0; i < 6; i++)
- verdict |= (mp[i] ^ info->smaddr[i]) &
- info->smmsk[i];
- if (FWINV(verdict != 0, EBT_ARP_SRC_MAC))
+ if (FWINV(!ether_addr_equal_masked(mp, info->smaddr,
+ info->smmsk),
+ EBT_ARP_SRC_MAC))
return false;
}
@@ -88,11 +85,9 @@ ebt_arp_mt(const struct sk_buff *skb, struct xt_action_param *par)
sizeof(_mac), &_mac);
if (mp == NULL)
return false;
- verdict = 0;
- for (i = 0; i < 6; i++)
- verdict |= (mp[i] ^ info->dmaddr[i]) &
- info->dmmsk[i];
- if (FWINV(verdict != 0, EBT_ARP_DST_MAC))
+ if (FWINV(!ether_addr_equal_masked(mp, info->dmaddr,
+ info->dmmsk),
+ EBT_ARP_DST_MAC))
return false;
}
}