The routing checks are validating the sender mac address. They reject every
sender mac address which is a broadcast. But they also have to reject
zero-mac address and multicast mac addresses.

Signed-off-by: Sven Eckelmann <[email protected]>
---
 net/batman-adv/routing.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c
index 610f2c4..b648caf 100644
--- a/net/batman-adv/routing.c
+++ b/net/batman-adv/routing.c
@@ -196,8 +196,8 @@ bool batadv_check_management_packet(struct sk_buff *skb,
        if (!is_broadcast_ether_addr(ethhdr->h_dest))
                return false;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with invalid sender address */
+       if (!is_valid_ether_addr(ethhdr->h_source))
                return false;
 
        /* create a copy of the skb, if needed, to modify it. */
@@ -357,8 +357,8 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
        if (is_broadcast_ether_addr(ethhdr->h_dest))
                goto out;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with invalid sender address */
+       if (!is_valid_ether_addr(ethhdr->h_source))
                goto out;
 
        /* not for me */
@@ -449,8 +449,8 @@ static int batadv_check_unicast_packet(struct batadv_priv 
*bat_priv,
        if (is_broadcast_ether_addr(ethhdr->h_dest))
                return -EBADR;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with invalid sender address */
+       if (!is_valid_ether_addr(ethhdr->h_source))
                return -EBADR;
 
        /* not for me */
@@ -1091,8 +1091,8 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
        if (!is_broadcast_ether_addr(ethhdr->h_dest))
                goto out;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with invalid sender address */
+       if (!is_valid_ether_addr(ethhdr->h_source))
                goto out;
 
        /* ignore broadcasts sent by myself */
-- 
2.8.1

Reply via email to