diff --git a/src/network.c b/src/network.c index d80e341f..5bd57777 100644 --- a/src/network.c +++ b/src/network.c @@ -768,6 +768,7 @@ struct scan_bss *network_bss_select(struct network *network, struct wiphy *wiphy = station_get_wiphy(network->station); const struct l_queue_entry *bss_entry; struct scan_bss *candidate = NULL; + bool fils_hint = network_has_erp_identity(network); for (bss_entry = l_queue_get_entries(bss_list); bss_entry; bss_entry = bss_entry->next) { @@ -776,7 +777,7 @@ struct scan_bss *network_bss_select(struct network *network, switch (network_get_security(network)) { case SECURITY_PSK: case SECURITY_8021X: - if (!wiphy_can_connect(wiphy, bss)) + if (!wiphy_can_connect(wiphy, bss, fils_hint)) continue; /* fall through */ case SECURITY_NONE: diff --git a/src/station.c b/src/station.c index 40974b4c..9c2b4e64 100644 --- a/src/station.c +++ b/src/station.c @@ -1890,6 +1890,7 @@ static bool station_roam_scan_notify(int err, struct l_queue *bss_list, uint16_t mdid; enum security orig_security, security; bool seen = false; + bool fils_hint = network_has_erp_identity(network); if (err) { station_roam_failed(station); @@ -1946,7 +1947,7 @@ static bool station_roam_scan_notify(int err, struct l_queue *bss_list, seen = true; - if (!wiphy_can_connect(station->wiphy, bss)) + if (!wiphy_can_connect(station->wiphy, bss, fils_hint)) goto next; if (blacklist_contains_bss(bss->addr)) diff --git a/src/wiphy.c b/src/wiphy.c index 7d5dc4b5..7d491913 100644 --- a/src/wiphy.c +++ b/src/wiphy.c @@ -397,7 +397,8 @@ const struct scan_freq_set *wiphy_get_supported_freqs( return wiphy->supported_freqs; } -bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss) +bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss, + bool fils_hint) { struct ie_rsn_info rsn_info; int r; @@ -416,7 +417,7 @@ bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss) rsn_info.group_management_cipher)) return false; - return wiphy_select_akm(wiphy, bss, false); + return wiphy_select_akm(wiphy, bss, fils_hint); } else if (r != -ENOENT) return false; diff --git a/src/wiphy.h b/src/wiphy.h index 50fcb182..c5891f73 100644 --- a/src/wiphy.h +++ b/src/wiphy.h @@ -78,7 +78,8 @@ const char *wiphy_get_path(struct wiphy *wiphy); uint32_t wiphy_get_supported_bands(struct wiphy *wiphy); const struct scan_freq_set *wiphy_get_supported_freqs( const struct wiphy *wiphy); -bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss); +bool wiphy_can_connect(struct wiphy *wiphy, struct scan_bss *bss, + bool fils_hint); bool wiphy_supports_cmds_auth_assoc(struct wiphy *wiphy); bool wiphy_can_randomize_mac_addr(struct wiphy *wiphy); bool wiphy_rrm_capable(struct wiphy *wiphy);