diff options
author | James Prestwood <prestwoj@gmail.com> | 2020-03-06 11:16:28 -0800 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2020-03-06 13:08:25 -0600 |
commit | ca9110e8c27d5bde60958207cf767d39e77d113b (patch) | |
tree | 852e75a67f264006c60d64acd5d2c03a5e30bec2 | |
parent | d40a8d1a6d942e1b14dc7d30267a467644ae4ff9 (diff) | |
download | iwd-ca9110e8c27d5bde60958207cf767d39e77d113b.tar.gz |
network: enforce max EAP/pkey password length
-rw-r--r-- | src/network.c | 17 |
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); } |