Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c718958 authored by Marek Lindner's avatar Marek Lindner Committed by Antonio Quartulli
Browse files

batman-adv: fix erroneous client entry duplicate detection



The translation table implementation, namely batadv_compare_tt(),
is used to compare two client entries and deciding if they are the
holding the same information. Each client entry is identified by
its mac address and its VLAN id (VID).
Consequently, batadv_compare_tt() has to not only compare the mac
addresses but also the VIDs.

Without this fix adding a new client entry that possesses the same
mac address as another client but operates on a different VID will
fail because both client entries will considered identical.

Signed-off-by: default avatarMarek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: default avatarAntonio Quartulli <antonio@meshcoding.com>
parent a6cb3909
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -68,13 +68,15 @@ static void batadv_tt_global_del(struct batadv_priv *bat_priv,
				 unsigned short vid, const char *message,
				 unsigned short vid, const char *message,
				 bool roaming);
				 bool roaming);


/* returns 1 if they are the same mac addr */
/* returns 1 if they are the same mac addr and vid */
static int batadv_compare_tt(const struct hlist_node *node, const void *data2)
static int batadv_compare_tt(const struct hlist_node *node, const void *data2)
{
{
	const void *data1 = container_of(node, struct batadv_tt_common_entry,
	const void *data1 = container_of(node, struct batadv_tt_common_entry,
					 hash_entry);
					 hash_entry);
	const struct batadv_tt_common_entry *tt1 = data1;
	const struct batadv_tt_common_entry *tt2 = data2;


	return batadv_compare_eth(data1, data2);
	return (tt1->vid == tt2->vid) && batadv_compare_eth(data1, data2);
}
}


/**
/**