[openwrt/openwrt] hostapd: fix wpa_supplicant mac address allocation on ap+sta

LEDE Commits lede-commits at lists.infradead.org
Thu Sep 28 01:33:12 PDT 2023


nbd pushed a commit to openwrt/openwrt.git, branch openwrt-23.05:
https://git.openwrt.org/02ed2b0271c5e17584884146649d7fb64a9ac35d

commit 02ed2b0271c5e17584884146649d7fb64a9ac35d
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Thu Sep 28 10:28:43 2023 +0200

    hostapd: fix wpa_supplicant mac address allocation on ap+sta
    
    If the full interface is restarted while bringing up an AP, it can trigger a
    wpa_supplicant interface start before wpa_supplicant is notified of the
    allocated mac addresses.
    Fix this by moving the iface_update_supplicant_macaddr call to just after
    the point where mac addresses are allocated.
    
    Reported-by: Michael-cy Lee (李峻宇) <Michael-cy.Lee at mediatek.com>
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
    (cherry picked from commit abceef120d57bf066941882630a76788eb4985a9)
---
 package/network/services/hostapd/files/hostapd.uc | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/package/network/services/hostapd/files/hostapd.uc b/package/network/services/hostapd/files/hostapd.uc
index 5cddb9c268..88f01caa93 100644
--- a/package/network/services/hostapd/files/hostapd.uc
+++ b/package/network/services/hostapd/files/hostapd.uc
@@ -122,6 +122,14 @@ function iface_config_macaddr_list(config)
 	return macaddr_list;
 }
 
+function iface_update_supplicant_macaddr(phy, config)
+{
+	let macaddr_list = [];
+	for (let i = 0; i < length(config.bss); i++)
+		push(macaddr_list, config.bss[i].bssid);
+	ubus.call("wpa_supplicant", "phy_set_macaddr_list", { phy: phy, macaddr: macaddr_list });
+}
+
 function iface_restart(phydev, config, old_config)
 {
 	let phy = phydev.name;
@@ -142,6 +150,8 @@ function iface_restart(phydev, config, old_config)
 			bss.bssid = phydev.macaddr_next();
 	}
 
+	iface_update_supplicant_macaddr(phy, config);
+
 	let bss = config.bss[0];
 	let err = wdev_create(phy, bss.ifname, { mode: "ap" });
 	if (err)
@@ -498,14 +508,6 @@ function iface_reload_config(phydev, config, old_config)
 	return true;
 }
 
-function iface_update_supplicant_macaddr(phy, config)
-{
-	let macaddr_list = [];
-	for (let i = 0; i < length(config.bss); i++)
-		push(macaddr_list, config.bss[i].bssid);
-	ubus.call("wpa_supplicant", "phy_set_macaddr_list", { phy: phy, macaddr: macaddr_list });
-}
-
 function iface_set_config(phy, config)
 {
 	let old_config = hostapd.data.config[phy];
@@ -536,7 +538,6 @@ function iface_set_config(phy, config)
 
 	hostapd.printf(`Restart interface for phy ${phy}`);
 	let ret = iface_restart(phydev, config, old_config);
-	iface_update_supplicant_macaddr(phy, config);
 
 	return ret;
 }




More information about the lede-commits mailing list