Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 562da3a3 authored by Pali Rohár's avatar Pali Rohár Committed by Kalle Valo
Browse files

wl1251: Generate random MAC address only if driver does not have valid



Before this patch, driver generated random MAC address every time it was
initialized. After that random MAC address could be overwritten with fixed
one, if provided.

This patch changes order. First it tries to read fixed MAC address and if
it fails then driver generates random MAC address.

Signed-off-by: default avatarPali Rohár <pali.rohar@gmail.com>
Acked-by: default avatarPavel Machek <pavel@ucw.cz>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent f63b4c97
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -1491,7 +1491,24 @@ int wl1251_init_ieee80211(struct wl1251 *wl)
	wl->hw->queues = 4;

	if (wl->use_eeprom)
		wl1251_read_eeprom_mac(wl);
		ret = wl1251_read_eeprom_mac(wl);
	else
		ret = -EINVAL;

	if (ret == 0 && !is_valid_ether_addr(wl->mac_addr))
		ret = -EINVAL;

	if (ret < 0) {
		/*
		 * In case our MAC address is not correctly set,
		 * we use a random but Nokia MAC.
		 */
		static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};
		memcpy(wl->mac_addr, nokia_oui, 3);
		get_random_bytes(wl->mac_addr + 3, 3);
		wl1251_warning("MAC address in eeprom or nvs data is not valid");
		wl1251_warning("Setting random MAC address: %pM", wl->mac_addr);
	}

	ret = wl1251_register_hw(wl);
	if (ret)
@@ -1512,7 +1529,6 @@ struct ieee80211_hw *wl1251_alloc_hw(void)
	struct ieee80211_hw *hw;
	struct wl1251 *wl;
	int i;
	static const u8 nokia_oui[3] = {0x00, 0x1f, 0xdf};

	hw = ieee80211_alloc_hw(sizeof(*wl), &wl1251_ops);
	if (!hw) {
@@ -1562,13 +1578,6 @@ struct ieee80211_hw *wl1251_alloc_hw(void)
	INIT_WORK(&wl->irq_work, wl1251_irq_work);
	INIT_WORK(&wl->tx_work, wl1251_tx_work);

	/*
	 * In case our MAC address is not correctly set,
	 * we use a random but Nokia MAC.
	 */
	memcpy(wl->mac_addr, nokia_oui, 3);
	get_random_bytes(wl->mac_addr + 3, 3);

	wl->state = WL1251_STATE_OFF;
	mutex_init(&wl->mutex);
	spin_lock_init(&wl->wl_lock);