Cumulative patch from commit 2b6623ab134fff6d96114f5fe329a2f87d5e893a
2b6623a hostapd: Do not terminate process on dynamic interface add failure
217cf49 P2P: Add more debug prints for frequency selection
4dd3f86 P2P: Fix bug in GO frequency selection
9804873 wpa_supplicant: Fix bug in get_shared_radio_freqs
3342c26 wpa_supplicant: Fix updating GO beacons on WFD subelements change
72c12c1 EAPOL: Fix static analyzer warnings for pac_opaque_encr_key
3139270 bgscan: Add global bgscan configuration
efc58df eap_proxy: Re-read IMSI from proxy in Interworking functionality
Change-Id: I006abd3b52fbbd1a7b97059364c72ab0386d5f63
Signed-off-by: Dmitry Shmidt <dimitrysh@google.com>
diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c
index 5d51c77..52be311 100644
--- a/src/ap/hostapd.c
+++ b/src/ap/hostapd.c
@@ -1082,7 +1082,8 @@
if (err) {
wpa_printf(MSG_ERROR, "Interface initialization failed");
hostapd_set_state(iface, HAPD_IFACE_DISABLED);
- eloop_terminate();
+ if (iface->interfaces && iface->interfaces->terminate_on_error)
+ eloop_terminate();
return -1;
}
@@ -1187,6 +1188,8 @@
wpa_printf(MSG_DEBUG, "%s: Setup of interface done.",
iface->bss[0]->conf->iface);
+ if (iface->interfaces && iface->interfaces->terminate_on_error > 0)
+ iface->interfaces->terminate_on_error--;
return 0;
}
diff --git a/src/ap/hostapd.h b/src/ap/hostapd.h
index 05bcb62..adb3728 100644
--- a/src/ap/hostapd.h
+++ b/src/ap/hostapd.h
@@ -45,6 +45,8 @@
gid_t ctrl_iface_group;
struct hostapd_iface **iface;
struct hostapd_dynamic_iface **dynamic_iface;
+
+ size_t terminate_on_error;
};
enum hostapd_chan_status {
diff --git a/src/eapol_auth/eapol_auth_sm.c b/src/eapol_auth/eapol_auth_sm.c
index 013d781..a257781 100644
--- a/src/eapol_auth/eapol_auth_sm.c
+++ b/src/eapol_auth/eapol_auth_sm.c
@@ -1062,6 +1062,10 @@
}
if (src->pac_opaque_encr_key) {
dst->pac_opaque_encr_key = os_malloc(16);
+ if (dst->pac_opaque_encr_key == NULL) {
+ os_free(dst->eap_req_id_text);
+ return -1;
+ }
os_memcpy(dst->pac_opaque_encr_key, src->pac_opaque_encr_key,
16);
} else
@@ -1070,6 +1074,7 @@
dst->eap_fast_a_id = os_malloc(src->eap_fast_a_id_len);
if (dst->eap_fast_a_id == NULL) {
os_free(dst->eap_req_id_text);
+ os_free(dst->pac_opaque_encr_key);
return -1;
}
os_memcpy(dst->eap_fast_a_id, src->eap_fast_a_id,
@@ -1081,6 +1086,7 @@
dst->eap_fast_a_id_info = os_strdup(src->eap_fast_a_id_info);
if (dst->eap_fast_a_id_info == NULL) {
os_free(dst->eap_req_id_text);
+ os_free(dst->pac_opaque_encr_key);
os_free(dst->eap_fast_a_id);
return -1;
}
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 9730282..b09fbac 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -4298,7 +4298,7 @@
for (g = 0; g < p2p->num_groups; g++) {
group = p2p->groups[g];
- p2p_group_update_ies(group);
+ p2p_group_force_beacon_update_ies(group);
}
}
diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c
index 15e7622..92b5583 100644
--- a/src/p2p/p2p_group.c
+++ b/src/p2p/p2p_group.c
@@ -980,3 +980,10 @@
return os_memcmp(group_id + ETH_ALEN, group->cfg->ssid,
group->cfg->ssid_len) == 0;
}
+
+
+void p2p_group_force_beacon_update_ies(struct p2p_group *group)
+{
+ group->beacon_update = 1;
+ p2p_group_update_ies(group);
+}
diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h
index e5d52aa..e4ec6de 100644
--- a/src/p2p/p2p_i.h
+++ b/src/p2p/p2p_i.h
@@ -616,6 +616,7 @@
int p2p_group_is_group_id_match(struct p2p_group *group, const u8 *group_id,
size_t group_id_len);
void p2p_group_update_ies(struct p2p_group *group);
+void p2p_group_force_beacon_update_ies(struct p2p_group *group);
struct wpabuf * p2p_group_get_wfd_ie(struct p2p_group *g);