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;
 }

Reply via email to