nl80211: Allow PASN Authentication frames with random (foreign) MAC address
To support secure ranging with a random MAC address, PASN handshake is performed with a different source MAC address from the device's own interface address. Hence, allow PASN Authentication frames with any foreign MAC address to further process the Authentication frames. Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
This commit is contained in:
parent
24929543ba
commit
58a96187ee
1 changed files with 26 additions and 5 deletions
|
@ -1089,6 +1089,7 @@ static void mlme_event(struct i802_bss *bss,
|
||||||
struct nlattr *wmm, struct nlattr *req_ie)
|
struct nlattr *wmm, struct nlattr *req_ie)
|
||||||
{
|
{
|
||||||
struct wpa_driver_nl80211_data *drv = bss->drv;
|
struct wpa_driver_nl80211_data *drv = bss->drv;
|
||||||
|
u16 stype = 0, auth_type = 0;
|
||||||
const u8 *data;
|
const u8 *data;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
|
@ -1118,11 +1119,31 @@ static void mlme_event(struct i802_bss *bss,
|
||||||
nl80211_command_to_string(cmd), bss->ifname,
|
nl80211_command_to_string(cmd), bss->ifname,
|
||||||
MAC2STR(bss->addr), MAC2STR(data + 4),
|
MAC2STR(bss->addr), MAC2STR(data + 4),
|
||||||
MAC2STR(data + 4 + ETH_ALEN));
|
MAC2STR(data + 4 + ETH_ALEN));
|
||||||
if (cmd != NL80211_CMD_FRAME_TX_STATUS && !(data[4] & 0x01) &&
|
|
||||||
os_memcmp(bss->addr, data + 4, ETH_ALEN) != 0 &&
|
/* PASN Authentication frame can be received with a different source MAC
|
||||||
(is_zero_ether_addr(bss->rand_addr) ||
|
* address. Allow NL80211_CMD_FRAME event with foreign addresses also.
|
||||||
os_memcmp(bss->rand_addr, data + 4, ETH_ALEN) != 0) &&
|
*/
|
||||||
os_memcmp(bss->addr, data + 4 + ETH_ALEN, ETH_ALEN) != 0) {
|
if (cmd == NL80211_CMD_FRAME && len >= 24) {
|
||||||
|
const struct ieee80211_mgmt *mgmt;
|
||||||
|
u16 fc;
|
||||||
|
|
||||||
|
mgmt = (const struct ieee80211_mgmt *) data;
|
||||||
|
fc = le_to_host16(mgmt->frame_control);
|
||||||
|
stype = WLAN_FC_GET_STYPE(fc);
|
||||||
|
auth_type = le_to_host16(mgmt->u.auth.auth_alg);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd == NL80211_CMD_FRAME && stype == WLAN_FC_STYPE_AUTH &&
|
||||||
|
auth_type == host_to_le16(WLAN_AUTH_PASN)) {
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"nl80211: %s: Allow PASN frame for foreign address",
|
||||||
|
bss->ifname);
|
||||||
|
} else if (cmd != NL80211_CMD_FRAME_TX_STATUS &&
|
||||||
|
!(data[4] & 0x01) &&
|
||||||
|
os_memcmp(bss->addr, data + 4, ETH_ALEN) != 0 &&
|
||||||
|
(is_zero_ether_addr(bss->rand_addr) ||
|
||||||
|
os_memcmp(bss->rand_addr, data + 4, ETH_ALEN) != 0) &&
|
||||||
|
os_memcmp(bss->addr, data + 4 + ETH_ALEN, ETH_ALEN) != 0) {
|
||||||
wpa_printf(MSG_MSGDUMP, "nl80211: %s: Ignore MLME frame event "
|
wpa_printf(MSG_MSGDUMP, "nl80211: %s: Ignore MLME frame event "
|
||||||
"for foreign address", bss->ifname);
|
"for foreign address", bss->ifname);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Reference in a new issue