aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Prestwood <prestwoj@gmail.com>2020-03-06 11:16:28 -0800
committerDenis Kenzior <denkenz@gmail.com>2020-03-06 13:08:25 -0600
commitca9110e8c27d5bde60958207cf767d39e77d113b (patch)
tree852e75a67f264006c60d64acd5d2c03a5e30bec2
parentd40a8d1a6d942e1b14dc7d30267a467644ae4ff9 (diff)
downloadiwd-ca9110e8c27d5bde60958207cf767d39e77d113b.tar.gz
network: enforce max EAP/pkey password length
-rw-r--r--src/network.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/network.c b/src/network.c
index fe6ba867b..c08d7e725 100644
--- a/src/network.c
+++ b/src/network.c
@@ -892,7 +892,15 @@ static void eap_password_callback(enum agent_result result, const char *value,
struct eap_secret_request *req = user_data;
req->network->agent_request = 0;
- req->secret->value = l_strdup(value);
+
+ if (value) {
+ if (strlen(value) < IWD_MAX_PASSWORD_LEN)
+ req->secret->value = l_strdup(value);
+ else {
+ l_error("EAP password too long");
+ result = AGENT_RESULT_FAILED;
+ }
+ }
req->callback(result, message, req);
}
@@ -910,11 +918,18 @@ static void eap_user_password_callback(enum agent_result result,
size_t len1 = strlen(user) + 1;
size_t len2 = strlen(passwd) + 1;
+ if (len2 > IWD_MAX_PASSWORD_LEN) {
+ l_error("EAP password too long");
+ result = AGENT_RESULT_FAILED;
+ goto done;
+ }
+
req->secret->value = l_malloc(len1 + len2);
memcpy(req->secret->value, user, len1);
memcpy(req->secret->value + len1, passwd, len2);
}
+done:
req->callback(result, message, req);
}