]> git.karo-electronics.de Git - linux-beck.git/commitdiff
batman-adv: Disallow mcast src address for data frames
authorSven Eckelmann <sven@narfation.org>
Sat, 6 Aug 2016 15:04:21 +0000 (17:04 +0200)
committerSimon Wunderlich <sw@simonwunderlich.de>
Tue, 8 Nov 2016 18:02:35 +0000 (19:02 +0100)
The routing checks are validating the source mac address of the outer
ethernet header. They reject every source mac address which is a broadcast
address. But they also have to reject any multicast mac addresses.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
[sw@simonwunderlich.de: fix commit message typo]
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
net/batman-adv/routing.c

index 105d4fcb8071f22047b320fde7162c0a125be7b8..c02897ba9b8b8d52d0a3e13ba2447795034aaa58 100644 (file)
@@ -368,8 +368,8 @@ int batadv_recv_icmp_packet(struct sk_buff *skb,
        if (is_broadcast_ether_addr(ethhdr->h_dest))
                goto free_skb;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with broadcast/multicast sender address */
+       if (is_multicast_ether_addr(ethhdr->h_source))
                goto free_skb;
 
        /* not for me */
@@ -466,8 +466,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 broadcast/multicast sender address */
+       if (is_multicast_ether_addr(ethhdr->h_source))
                return -EBADR;
 
        /* not for me */
@@ -1159,8 +1159,8 @@ int batadv_recv_bcast_packet(struct sk_buff *skb,
        if (!is_broadcast_ether_addr(ethhdr->h_dest))
                goto free_skb;
 
-       /* packet with broadcast sender address */
-       if (is_broadcast_ether_addr(ethhdr->h_source))
+       /* packet with broadcast/multicast sender address */
+       if (is_multicast_ether_addr(ethhdr->h_source))
                goto free_skb;
 
        /* ignore broadcasts sent by myself */