aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikael Kanstrup <mikael.kanstrup@sony.com>2019-08-16 08:50:54 +0200
committerJimmy Chen <jimmycmchen@google.com>2019-10-03 03:47:38 +0000
commitb18a958c2e1e80bc802ecc298965b2658486737c (patch)
tree1d29058f8e22c4bf37345d9e23327c680802fde2
parentc6dde5922e5987cb0da27d55810d415e71c5a1f8 (diff)
downloadwpa_supplicant_8-b18a958c2e1e80bc802ecc298965b2658486737c.tar.gz
WPS: Update MAC address on address changes
The WPS component keeps a copy of the network interface MAC address. When MAC address is changed the WPS copy was not updated so WPS M1 message contained the old address. Some devices check this field and fail connection attempts. Update the WPS MAC address on interface MAC address changes. (cherry-picked from 8788a314d7897c90195c6f94810f55b2ba6e7190) Bug: 140748809 Test: manually test with some TVs (WFD sink) Signed-off-by: Mikael Kanstrup <mikael.kanstrup@sony.com> Signed-off-by: Daichi Ueura <daichi.ueura@sony.com> Change-Id: Id8b7ec54bdbbf8b18416af6e3063af163344f5b1
-rw-r--r--wpa_supplicant/wpa_supplicant.c1
-rw-r--r--wpa_supplicant/wps_supplicant.c10
-rw-r--r--wpa_supplicant/wps_supplicant.h5
3 files changed, 16 insertions, 0 deletions
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index be8efb4c..5d4adf4f 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -4333,6 +4333,7 @@ int wpa_supplicant_update_mac_addr(struct wpa_supplicant *wpa_s)
}
wpa_sm_set_own_addr(wpa_s->wpa, wpa_s->own_addr);
+ wpas_wps_update_mac_addr(wpa_s);
return 0;
}
diff --git a/wpa_supplicant/wps_supplicant.c b/wpa_supplicant/wps_supplicant.c
index 2950763b..5da81545 100644
--- a/wpa_supplicant/wps_supplicant.c
+++ b/wpa_supplicant/wps_supplicant.c
@@ -2235,6 +2235,16 @@ void wpas_wps_update_config(struct wpa_supplicant *wpa_s)
}
+void wpas_wps_update_mac_addr(struct wpa_supplicant *wpa_s)
+{
+ struct wps_context *wps;
+
+ wps = wpa_s->wps;
+ if (wps)
+ os_memcpy(wps->dev.mac_addr, wpa_s->own_addr, ETH_ALEN);
+}
+
+
#ifdef CONFIG_WPS_NFC
#ifdef CONFIG_WPS_ER
diff --git a/wpa_supplicant/wps_supplicant.h b/wpa_supplicant/wps_supplicant.h
index 3a99f2c5..41b92980 100644
--- a/wpa_supplicant/wps_supplicant.h
+++ b/wpa_supplicant/wps_supplicant.h
@@ -62,6 +62,7 @@ struct wpabuf * wpas_wps_er_nfc_config_token(struct wpa_supplicant *wpa_s,
int ndef, const char *uuid);
int wpas_wps_terminate_pending(struct wpa_supplicant *wpa_s);
void wpas_wps_update_config(struct wpa_supplicant *wpa_s);
+void wpas_wps_update_mac_addr(struct wpa_supplicant *wpa_s);
struct wpabuf * wpas_wps_network_config_token(struct wpa_supplicant *wpa_s,
int ndef, struct wpa_ssid * ssid);
struct wpabuf * wpas_wps_nfc_config_token(struct wpa_supplicant *wpa_s,
@@ -156,6 +157,10 @@ wpas_wps_reenable_networks_pending(struct wpa_supplicant *wpa_s)
return 0;
}
+static inline void wpas_wps_update_mac_addr(struct wpa_supplicant *wpa_s)
+{
+}
+
#endif /* CONFIG_WPS */
#endif /* WPS_SUPPLICANT_H */