Module Name: src
Committed By: christos
Date: Fri Jul 27 18:35:57 UTC 2012
Modified Files:
src/crypto/external/bsd/openssl/dist/engines: e_padlock.c
Log Message:
avoid an alloca for SSP
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.3 -r1.2 \
src/crypto/external/bsd/openssl/dist/engines/e_padlock.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/crypto/external/bsd/openssl/dist/engines/e_padlock.c
diff -u src/crypto/external/bsd/openssl/dist/engines/e_padlock.c:1.1.1.3 src/crypto/external/bsd/openssl/dist/engines/e_padlock.c:1.2
--- src/crypto/external/bsd/openssl/dist/engines/e_padlock.c:1.1.1.3 Thu Jul 26 11:04:50 2012
+++ src/crypto/external/bsd/openssl/dist/engines/e_padlock.c Fri Jul 27 14:35:57 2012
@@ -915,7 +915,7 @@ padlock_aes_cipher(EVP_CIPHER_CTX *ctx,
{
struct padlock_cipher_data *cdata;
const void *inp;
- unsigned char *out;
+ unsigned char *out, *tofree;
void *iv;
int inp_misaligned, out_misaligned, realign_in_loop;
size_t chunk, allocated=0;
@@ -999,11 +999,15 @@ padlock_aes_cipher(EVP_CIPHER_CTX *ctx,
if (out_misaligned) {
/* optmize for small input */
allocated = (chunk<nbytes?PADLOCK_CHUNK:nbytes);
- out = alloca(0x10 + allocated);
- out = NEAREST_ALIGNED(out);
+ tofree = malloc(0x10 + allocated);
+ if (tofree == NULL)
+ return 0;
+ out = NEAREST_ALIGNED(tofree);
}
- else
+ else {
out = out_arg;
+ tofree = NULL;
+ }
cdata = ALIGNED_CIPHER_DATA(ctx);
padlock_verify_context(cdata);
@@ -1152,6 +1156,7 @@ padlock_aes_cipher(EVP_CIPHER_CTX *ctx,
break;
default:
+ free(tofree);
return 0;
}
@@ -1163,6 +1168,7 @@ padlock_aes_cipher(EVP_CIPHER_CTX *ctx,
}
memset(cdata->iv, 0, AES_BLOCK_SIZE);
+ free(tofree);
return 1;
}