mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-02-21 11:33:04 -05:00
mka: Introduce compare_priorities()
This takes care of priority comparison followed by MAC address comparison if the priorities are identical. Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
This commit is contained in:
parent
53080f770c
commit
0dabf79b5d
@ -2089,6 +2089,18 @@ ieee802_1x_kay_generate_new_sak(struct ieee802_1x_mka_participant *participant)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int compare_priorities(const struct ieee802_1x_kay_peer *peer,
|
||||||
|
const struct ieee802_1x_kay_peer *other)
|
||||||
|
{
|
||||||
|
if (peer->key_server_priority < other->key_server_priority)
|
||||||
|
return -1;
|
||||||
|
if (other->key_server_priority < peer->key_server_priority)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return os_memcmp(peer->sci.addr, other->sci.addr, ETH_ALEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ieee802_1x_kay_elect_key_server - elect the key server
|
* ieee802_1x_kay_elect_key_server - elect the key server
|
||||||
* when to elect: whenever the live peers list changes
|
* when to elect: whenever the live peers list changes
|
||||||
@ -2119,29 +2131,19 @@ ieee802_1x_kay_elect_key_server(struct ieee802_1x_mka_participant *participant)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peer->key_server_priority <
|
if (compare_priorities(peer, key_server) < 0)
|
||||||
key_server->key_server_priority) {
|
|
||||||
key_server = peer;
|
key_server = peer;
|
||||||
} else if (peer->key_server_priority ==
|
|
||||||
key_server->key_server_priority) {
|
|
||||||
if (os_memcmp(peer->sci.addr, key_server->sci.addr,
|
|
||||||
ETH_ALEN) < 0)
|
|
||||||
key_server = peer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* elect the key server between me and the above elected peer */
|
/* elect the key server between me and the above elected peer */
|
||||||
i_is_key_server = FALSE;
|
i_is_key_server = FALSE;
|
||||||
if (key_server && participant->can_be_key_server) {
|
if (key_server && participant->can_be_key_server) {
|
||||||
if (kay->actor_priority
|
struct ieee802_1x_kay_peer tmp;
|
||||||
< key_server->key_server_priority) {
|
|
||||||
|
tmp.key_server_priority = kay->actor_priority;
|
||||||
|
os_memcpy(&tmp.sci, &kay->actor_sci, sizeof(tmp.sci));
|
||||||
|
if (compare_priorities(&tmp, key_server) < 0)
|
||||||
i_is_key_server = TRUE;
|
i_is_key_server = TRUE;
|
||||||
} else if (kay->actor_priority
|
|
||||||
== key_server->key_server_priority) {
|
|
||||||
if (os_memcmp(kay->actor_sci.addr, key_server->sci.addr,
|
|
||||||
ETH_ALEN) < 0)
|
|
||||||
i_is_key_server = TRUE;
|
|
||||||
}
|
|
||||||
} else if (participant->can_be_key_server) {
|
} else if (participant->can_be_key_server) {
|
||||||
i_is_key_server = TRUE;
|
i_is_key_server = TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user