station: replace old BSS with 'best_bss' on roam scan

The logic here assumed any BSS's in the roam scan were identical to
ones in station's bss_list with the same address. Usually this is true
but, for example, if the BSS changed frequency the one in station's
list is invalid.

Instead when a match is found remove the old BSS and re-insert the new
one.
This commit is contained in:
James Prestwood 2022-03-04 13:24:19 -08:00 committed by Denis Kenzior
parent 1c5a2da046
commit 7bbcb67892
1 changed files with 6 additions and 2 deletions

View File

@ -2368,8 +2368,12 @@ next:
bss = network_bss_find_by_addr(network, best_bss->addr);
if (bss) {
scan_bss_free(best_bss);
best_bss = bss;
network_bss_update(network, best_bss);
l_queue_remove(station->bss_list, bss);
scan_bss_free(bss);
l_queue_insert(station->bss_list, best_bss,
scan_bss_rank_compare, NULL);
} else {
network_bss_add(network, best_bss);
l_queue_push_tail(station->bss_list, best_bss);