aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2022-06-02 17:25:04 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-06-02 17:25:04 +0000
commite9f457b1df0eefa9b37e7afa0cbe61580806b086 (patch)
treedb13a01ed510b4a287b59dd449b30beb87e02c46
parentc36b8e676f9169013018f252039d7d23f4e5fb59 (diff)
parent0fe68957445dae4fc22734d29a12af0a4945c351 (diff)
downloadwpa_supplicant_8-e9f457b1df0eefa9b37e7afa0cbe61580806b086.tar.gz
Merge "eap: do not reset the connection on updating decorated anonymous identity" into tm-dev am: 0fe6895744
Original change: https://googleplex-android-review.googlesource.com/c/platform/external/wpa_supplicant_8/+/18620725 Change-Id: I79f4a25737c777675a0e9212a84ec21336815be4 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--wpa_supplicant/aidl/sta_network.cpp39
-rw-r--r--wpa_supplicant/aidl/sta_network.h4
2 files changed, 38 insertions, 5 deletions
diff --git a/wpa_supplicant/aidl/sta_network.cpp b/wpa_supplicant/aidl/sta_network.cpp
index 88e7b74c..fe4a7604 100644
--- a/wpa_supplicant/aidl/sta_network.cpp
+++ b/wpa_supplicant/aidl/sta_network.cpp
@@ -1242,11 +1242,24 @@ ndk::ScopedAStatus StaNetwork::setEapAnonymousIdentityInternal(
const std::vector<uint8_t> &identity)
{
struct wpa_ssid *wpa_ssid = retrieveNetworkPtr();
- if (setByteArrayFieldAndResetState(
+ // If current supplicant pseudonym is the prefix of new pseudonym,
+ // the credential is not changed, just update the decoration.
+ // As a result, no need to reset the state.
+ // The decorated identity will have a postfix like
+ // @mncXXX.mccYYY.3gppnetwork.org, so the length will be always
+ // greater than the current one.
+ bool resetState = wpa_ssid->eap.anonymous_identity == NULL
+ || wpa_ssid->eap.anonymous_identity_len == 0
+ || identity.size() == 0
+ || wpa_ssid->eap.anonymous_identity_len >= identity.size()
+ || os_strncmp((char *) identity.data(),
+ (char *) wpa_ssid->eap.anonymous_identity,
+ wpa_ssid->eap.anonymous_identity_len) != 0;
+ if (setByteArrayField(
identity.data(), identity.size(),
&(wpa_ssid->eap.anonymous_identity),
&(wpa_ssid->eap.anonymous_identity_len),
- "eap anonymous_identity")) {
+ "eap anonymous_identity", resetState)) {
return createStatus(SupplicantStatusCode::FAILURE_UNKNOWN);
}
return ndk::ScopedAStatus::ok();
@@ -2385,9 +2398,9 @@ int StaNetwork::setStringKeyFieldAndResetState(
* field in |wpa_ssid| structure instance for this network.
* This function frees any existing data in these fields.
*/
-int StaNetwork::setByteArrayFieldAndResetState(
+int StaNetwork::setByteArrayField(
const uint8_t *value, const size_t value_len, uint8_t **to_update_field,
- size_t *to_update_field_len, const char *hexdump_prefix)
+ size_t *to_update_field_len, const char *hexdump_prefix, bool resetState)
{
if (*to_update_field) {
os_free(*to_update_field);
@@ -2402,11 +2415,27 @@ int StaNetwork::setByteArrayFieldAndResetState(
wpa_hexdump_ascii(
MSG_MSGDUMP, hexdump_prefix, *to_update_field,
*to_update_field_len);
- resetInternalStateAfterParamsUpdate();
+
+ if (resetState) {
+ resetInternalStateAfterParamsUpdate();
+ }
return 0;
}
/**
+ * Helper function to set value in a string field with a corresponding length
+ * field in |wpa_ssid| structure instance for this network.
+ * This function frees any existing data in these fields.
+ */
+int StaNetwork::setByteArrayFieldAndResetState(
+ const uint8_t *value, const size_t value_len, uint8_t **to_update_field,
+ size_t *to_update_field_len, const char *hexdump_prefix)
+{
+ return setByteArrayField(value, value_len, to_update_field,
+ to_update_field_len, hexdump_prefix, true);
+}
+
+/**
* Helper function to set value in a string key field with a corresponding
* length field in |wpa_ssid| structue instance for this network.
* This function frees any existing data in these fields.
diff --git a/wpa_supplicant/aidl/sta_network.h b/wpa_supplicant/aidl/sta_network.h
index 51056690..524f44a4 100644
--- a/wpa_supplicant/aidl/sta_network.h
+++ b/wpa_supplicant/aidl/sta_network.h
@@ -327,6 +327,10 @@ private:
void setFastTransitionKeyMgmt(uint32_t &key_mgmt_mask);
void resetFastTransitionKeyMgmt(uint32_t &key_mgmt_mask);
ndk::ScopedAStatus setEapErpInternal(bool enable);
+ int setByteArrayField(
+ const uint8_t* value, const size_t value_len,
+ uint8_t** to_update_field, size_t* to_update_field_len,
+ const char* hexdump_prefix, bool resetState);
// Reference to the global wpa_struct. This is assumed to be valid
// for the lifetime of the process.