---
src/iwd.h | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/iwd.h b/src/iwd.h
index 22223526..8b63aa7d 100644
--- a/src/iwd.h
+++ b/src/iwd.h
@@ -22,6 +22,13 @@
#define uninitialized_var(x) x = x
+/*
+ * Set a maximum to prevent sending too much data to the kernel when hashing
+ * the password (or any other crypto operations involving the password).
+ * This value is not tied to IEEE or any RFC's, just chosen to be long enough
+ */
+#define IWD_MAX_PASSWORD_LEN 2048
+
struct l_genl;
struct l_genl_family;
--
2.17.1
New subject: [PATCH v3 2/3] eap-gtc: limit password length to maximum
The password for EAP-GTC is directly used in an EAP response. The
response buffer is created on the stack so an overly large password
could cause a stack overflow.
---
src/eap-gtc.c | 10 ++++++++++
1 file changed, 10 insertions(+)
-v3:
* Defined maximum locally to not depend on iwd.h
diff --git a/src/eap-gtc.c b/src/eap-gtc.c
index 7788d44c..f895ec61 100644
--- a/src/eap-gtc.c
+++ b/src/eap-gtc.c
@@ -32,6 +32,8 @@
#include "src/eap.h"
#include "src/eap-private.h"
+#define EAP_GTC_MAX_PASSWORD_LEN 2048
+
struct eap_gtc_state {
char *password;
};
@@ -148,6 +150,14 @@ static bool eap_gtc_load_settings(struct eap_state *eap,
return false;
}
+ /*
+ * Limit length to prevent a stack overflow
+ */
+ if (strlen(password) > EAP_GTC_MAX_PASSWORD_LEN) {
+ l_free(password);
+ return false;
+ }
+
gtc = l_new(struct eap_gtc_state, 1);
gtc->password = password;
--
2.17.1