diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 139972b36..0fb2d682e 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -2539,6 +2539,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, case EVENT_CHANNEL_LIST_CHANGED: if (wpa_s->drv_priv == NULL) break; /* Ignore event during drv initialization */ + + free_hw_features(wpa_s); + wpa_s->hw.modes = wpa_drv_get_hw_feature_data( + wpa_s, &wpa_s->hw.num_modes, &wpa_s->hw.flags); + #ifdef CONFIG_P2P wpas_p2p_update_channel_list(wpa_s); #endif /* CONFIG_P2P */ diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 211e3258f..fdee4076d 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -348,7 +348,7 @@ void wpa_supplicant_set_non_wpa_policy(struct wpa_supplicant *wpa_s, } -static void free_hw_features(struct wpa_supplicant *wpa_s) +void free_hw_features(struct wpa_supplicant *wpa_s) { int i; if (wpa_s->hw.modes == NULL) diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index cb9fd5290..0ba19358f 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -586,6 +586,7 @@ int wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s, int wpa_supplicant_set_debug_params(struct wpa_global *global, int debug_level, int debug_timestamp, int debug_show_keys); +void free_hw_features(struct wpa_supplicant *wpa_s); void wpa_show_license(void);