batman-adv: ignore protocol packets if the interface did not enable this protocol
authorMarek Lindner <lindner_marek@yahoo.de>
Sat, 10 Mar 2012 22:17:49 +0000 (06:17 +0800)
committerAntonio Quartulli <ordex@autistici.org>
Fri, 11 May 2012 11:55:59 +0000 (13:55 +0200)
Reported-by: Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
net/batman-adv/bat_iv_ogm.c

index ae0a08c391ea4b951528687a3472d6641a2f806d..37e368d05937d0a412f0844a44449d97b9f9ccbf 100644 (file)
@@ -1186,6 +1186,7 @@ out:
 static int bat_iv_ogm_receive(struct sk_buff *skb,
                              struct hard_iface *if_incoming)
 {
+       struct bat_priv *bat_priv = netdev_priv(if_incoming->soft_iface);
        struct batman_ogm_packet *batman_ogm_packet;
        struct ethhdr *ethhdr;
        int buff_pos = 0, packet_len;
@@ -1196,6 +1197,12 @@ static int bat_iv_ogm_receive(struct sk_buff *skb,
        if (!ret)
                return NET_RX_DROP;
 
+       /* did we receive a B.A.T.M.A.N. IV OGM packet on an interface
+        * that does not have B.A.T.M.A.N. IV enabled ?
+        */
+       if (bat_priv->bat_algo_ops->bat_ogm_emit != bat_iv_ogm_emit)
+               return NET_RX_DROP;
+
        packet_len = skb_headlen(skb);
        ethhdr = (struct ethhdr *)skb_mac_header(skb);
        packet_buff = skb->data;