Pass in pointer to a local size_t var, not word32 var to prevent stack corruption.

This commit is contained in:
Anthony Hu
2021-12-08 15:58:46 -05:00
parent dd0e1226b7
commit 74442605fa

View File

@@ -62,6 +62,7 @@ int wc_falcon_sign_msg(const byte* in, word32 inLen,
{
int ret = 0;
OQS_SIG *oqssig = NULL;
size_t localOutLen = 0;
/* sanity check on arguments */
if ((in == NULL) || (out == NULL) || (outLen == NULL) || (key == NULL)) {
@@ -95,14 +96,19 @@ int wc_falcon_sign_msg(const byte* in, word32 inLen,
*outLen = FALCON_LEVEL5_SIG_SIZE;
ret = BUFFER_E;
}
localOutLen = *outLen;
}
if ((ret == 0) &&
(OQS_SIG_sign(oqssig, out, (size_t *)outLen, in, inLen, key->k)
(OQS_SIG_sign(oqssig, out, &localOutLen, in, inLen, key->k)
== OQS_ERROR)) {
ret = BAD_FUNC_ARG;
}
if (ret == 0) {
*outLen = (word32)localOutLen;
}
if (oqssig != NULL) {
OQS_SIG_free(oqssig);
}