mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2025-01-24 05:14:05 +01:00
station: support full MAC randomization and override
This patch adds two new options to a network provisioning file: AlwaysRandomizeAddress={true,false} If true, IWD will randomize the MAC address on each connection to this network. The address does not persists between connections, any new connection will result in a different MAC. AddressOverride=<MAC> If set, the MAC address will be set to <MAC> assuming its a valid MAC address. These two options should not be used together, and will only take effect if [General].AddressRandomization is set to 'network' in the IWD config file. If neither of these options are set, and [General].AddressRandomization is set to 'network', the default behavior remains the same; the MAC will be generated deterministically on a per-network basis.
This commit is contained in:
parent
33251ccd20
commit
e7777c3422
@ -875,6 +875,10 @@ static struct handshake_state *station_handshake_setup(struct station *station,
|
|||||||
struct handshake_state *hs;
|
struct handshake_state *hs;
|
||||||
const char *ssid;
|
const char *ssid;
|
||||||
uint32_t eapol_proto_version;
|
uint32_t eapol_proto_version;
|
||||||
|
const char *value;
|
||||||
|
bool full_random;
|
||||||
|
bool override = false;
|
||||||
|
uint8_t new_addr[ETH_ALEN];
|
||||||
|
|
||||||
hs = netdev_handshake_state_new(station->netdev);
|
hs = netdev_handshake_state_new(station->netdev);
|
||||||
|
|
||||||
@ -934,6 +938,42 @@ static struct handshake_state *station_handshake_setup(struct station *station,
|
|||||||
IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384))
|
IE_RSN_AKM_SUITE_FT_OVER_FILS_SHA384))
|
||||||
hs->erp_cache = erp_cache_get(network_get_ssid(network));
|
hs->erp_cache = erp_cache_get(network_get_ssid(network));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We have three possible options here:
|
||||||
|
* 1. per-network MAC generation (default, no option in network config)
|
||||||
|
* 2. per-network full MAC randomization
|
||||||
|
* 3. per-network MAC override
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!l_settings_get_bool(settings, "Settings",
|
||||||
|
"AlwaysRandomizeAddress",
|
||||||
|
&full_random))
|
||||||
|
full_random = false;
|
||||||
|
|
||||||
|
value = l_settings_get_value(settings, "Settings",
|
||||||
|
"AddressOverride");
|
||||||
|
if (value) {
|
||||||
|
if (util_string_to_address(value, new_addr) &&
|
||||||
|
util_is_valid_sta_address(new_addr))
|
||||||
|
override = true;
|
||||||
|
else
|
||||||
|
l_warn("[Network].AddressOverride is not a valid "
|
||||||
|
"MAC address");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (override && full_random) {
|
||||||
|
l_warn("Cannot use both AlwaysRandomizeAddress and "
|
||||||
|
"AddressOverride concurrently, defaulting to override");
|
||||||
|
full_random = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (override)
|
||||||
|
handshake_state_set_supplicant_address(hs, new_addr);
|
||||||
|
else if (full_random) {
|
||||||
|
wiphy_generate_random_address(wiphy, new_addr);
|
||||||
|
handshake_state_set_supplicant_address(hs, new_addr);
|
||||||
|
}
|
||||||
|
|
||||||
return hs;
|
return hs;
|
||||||
|
|
||||||
no_psk:
|
no_psk:
|
||||||
|
Loading…
Reference in New Issue
Block a user