mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-06 12:38:10 +02:00
device: don't regenerate MAC address on multiple _set_cloned() calls
Wi-Fi device first have a state-transition "disconnected -> prepare" on which they run activate_stage1_device_prepare() and set the MAC address the first time. Later, after getting secrets, they have a state transition "need-auth -> prepare" and end up calling nm_device_hw_addr_set_cloned() again. In this case, we must not regenerate a new MAC address but bail out. There is a small uncertainty there, because we are not sure that the previously generated connection really entailed the same settings. But since we always call nm_device_hw_addr_reset() during device deactivation, this cannot be a left-over from a previous activation and is thus the same activation request.
This commit is contained in:
parent
4b2e375b33
commit
60a88fb575
1 changed files with 12 additions and 0 deletions
|
|
@ -11748,6 +11748,12 @@ nm_device_hw_addr_set_cloned (NMDevice *self, NMConnection *connection, gboolean
|
||||||
return FALSE;
|
return FALSE;
|
||||||
priv->hw_addr_type = HW_ADDR_TYPE_PERMANENT;
|
priv->hw_addr_type = HW_ADDR_TYPE_PERMANENT;
|
||||||
} else if (NM_IN_STRSET (addr, NM_CLONED_MAC_RANDOM)) {
|
} else if (NM_IN_STRSET (addr, NM_CLONED_MAC_RANDOM)) {
|
||||||
|
if (priv->hw_addr_type == HW_ADDR_TYPE_GENERATED) {
|
||||||
|
/* hm, we already use a generate MAC address. Most certainly, that is from the same
|
||||||
|
* activation request, so we should not create a new random address, instead keep
|
||||||
|
* the current. */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
hw_addr_generated = nm_utils_hw_addr_gen_random_eth (nm_device_get_initial_hw_address (self),
|
hw_addr_generated = nm_utils_hw_addr_gen_random_eth (nm_device_get_initial_hw_address (self),
|
||||||
_get_generate_mac_address_mask_setting (self, connection, is_wifi, &generate_mac_address_mask_tmp));
|
_get_generate_mac_address_mask_setting (self, connection, is_wifi, &generate_mac_address_mask_tmp));
|
||||||
if (!hw_addr_generated) {
|
if (!hw_addr_generated) {
|
||||||
|
|
@ -11760,6 +11766,12 @@ nm_device_hw_addr_set_cloned (NMDevice *self, NMConnection *connection, gboolean
|
||||||
NMUtilsStableType stable_type;
|
NMUtilsStableType stable_type;
|
||||||
const char *stable_id;
|
const char *stable_id;
|
||||||
|
|
||||||
|
if (priv->hw_addr_type == HW_ADDR_TYPE_GENERATED) {
|
||||||
|
/* hm, we already use a generate MAC address. Most certainly, that is from the same
|
||||||
|
* activation request, so let's skip creating the stable address anew. */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
stable_id = _get_stable_id (connection, &stable_type);
|
stable_id = _get_stable_id (connection, &stable_type);
|
||||||
if (stable_id) {
|
if (stable_id) {
|
||||||
hw_addr_generated = nm_utils_hw_addr_gen_stable_eth (stable_type, stable_id,
|
hw_addr_generated = nm_utils_hw_addr_gen_stable_eth (stable_type, stable_id,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue