In case of MLD AP it is assumed that the multi link information (hapd->mld) is already initialized by the time this function is called. However, if the interface is added without bss_config parameter, hostapd_bss_setup_multi_link() would bail out immediately as mld_ap parameter isn't set yet. When the interface gets enabled later, hapd->mld would be NULL resulting in NULL dereference. Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@xxxxxxxxx> --- hostapd/main.c | 5 ++++- src/ap/hostapd.c | 4 ++-- src/ap/hostapd.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/hostapd/main.c b/hostapd/main.c index 512cd892bd..72bf324448 100644 --- a/hostapd/main.c +++ b/hostapd/main.c @@ -168,8 +168,11 @@ static int hostapd_driver_init(struct hostapd_iface *iface) } #ifdef CONFIG_IEEE80211BE - if (conf->mld_ap) + if (conf->mld_ap) { + if (!hapd->mld) + hostapd_bss_setup_multi_link(hapd, iface->interfaces); h_hapd = hostapd_mld_get_first_bss(hapd); + } if (h_hapd) { hapd->drv_priv = h_hapd->drv_priv; diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index f97311587d..23bff4ffa6 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -3080,8 +3080,8 @@ static void hostapd_bss_alloc_link_id(struct hostapd_data *hapd) #endif /* CONFIG_IEEE80211BE */ -static void hostapd_bss_setup_multi_link(struct hostapd_data *hapd, - struct hapd_interfaces *interfaces) +void hostapd_bss_setup_multi_link(struct hostapd_data *hapd, + struct hapd_interfaces *interfaces) { #ifdef CONFIG_IEEE80211BE struct hostapd_mld *mld, **all_mld; diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h index dddefb593c..dabca24efc 100644 --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h @@ -766,6 +766,8 @@ struct hostapd_iface * hostapd_init(struct hapd_interfaces *interfaces, struct hostapd_iface * hostapd_interface_init_bss(struct hapd_interfaces *interfaces, const char *phy, const char *config_fname, int debug); +void hostapd_bss_setup_multi_link(struct hostapd_data *hapd, + struct hapd_interfaces *interfaces); void hostapd_new_assoc_sta(struct hostapd_data *hapd, struct sta_info *sta, int reassoc); void hostapd_interface_deinit_free(struct hostapd_iface *iface); -- 2.43.0 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap