[commits] [batman-adv] master: batman-adv: fix bla compare function (923d5d1)

postmaster at open-mesh.org postmaster at open-mesh.org
Mon Oct 15 23:21:12 CEST 2012


Repository : ssh://git@open-mesh.org/batman-adv

On branch  : master

>---------------------------------------------------------------

commit 923d5d148cdd0928c9c5f8e0e2024f585dcf6efd
Author: Simon Wunderlich <simon.wunderlich at s2003.tu-chemnitz.de>
Date:   Mon Oct 15 22:38:04 2012 +0200

    batman-adv: fix bla compare function
    
    The address and the VLAN VID may not be packed in the respective
    structs. Fix this by comparing the elements individually.
    
    Reported-by: Marek Lindner <lindner_marek at yahoo.de>
    Reported-by: Sven Eckelmann <sven at narfation.org>
    Signed-off-by: Simon Wunderlich <siwu at hrz.tu-chemnitz.de>
    Signed-off-by: Marek Lindner <lindner_marek at yahoo.de>


>---------------------------------------------------------------

923d5d148cdd0928c9c5f8e0e2024f585dcf6efd
 bridge_loop_avoidance.c |   18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/bridge_loop_avoidance.c b/bridge_loop_avoidance.c
index 758d921..a617f2c 100644
--- a/bridge_loop_avoidance.c
+++ b/bridge_loop_avoidance.c
@@ -77,8 +77,15 @@ static int batadv_compare_backbone_gw(const struct hlist_node *node,
 {
 	const void *data1 = container_of(node, struct batadv_backbone_gw,
 					 hash_entry);
+	const struct batadv_backbone_gw *gw1 = data1, *gw2 = data2;
 
-	return (memcmp(data1, data2, ETH_ALEN + sizeof(short)) == 0 ? 1 : 0);
+	if (memcmp(gw1->orig, gw2->orig, ETH_ALEN))
+		return 0;
+
+	if (gw1->vid != gw2->vid)
+		return 0;
+
+	return 1;
 }
 
 /* compares address and vid of two claims */
@@ -87,8 +94,15 @@ static int batadv_compare_claim(const struct hlist_node *node,
 {
 	const void *data1 = container_of(node, struct batadv_claim,
 					 hash_entry);
+	const struct batadv_claim *cl1 = data1, *cl2 = data2;
 
-	return (memcmp(data1, data2, ETH_ALEN + sizeof(short)) == 0 ? 1 : 0);
+	if (memcmp(cl1->addr, cl2->addr, ETH_ALEN))
+		return 0;
+
+	if (cl1->vid != cl2->vid)
+		return 0;
+
+	return 1;
 }
 
 /* free a backbone gw */



More information about the commits mailing list