Do not overallocate for tmp.ciphers_raw
authorBenjamin Kaduk <bkaduk@akamai.com>
Tue, 24 Jan 2017 16:50:21 +0000 (10:50 -0600)
committerMatt Caswell <matt@openssl.org>
Tue, 24 Jan 2017 17:02:12 +0000 (17:02 +0000)
Well, not as much, at least.

Commit 07afdf3c3ac97af4f2b4eec22a97f7230f8227e0 changed things so
that for SSLv2 format ClientHellos we store the cipher list in the
TLS format, i.e., with two bytes per cipher, to be consistent with
historical behavior.

However, the space allocated for the array still performed the computation
with three bytes per cipher, a needless over-allocation (though a relatively
small one, all things considered).

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2281)

ssl/statem/statem_srvr.c

index 8d6fd1fb2cdcc24f70e6594e2ce20d58470042e7..84f6dfb4c2376c85ce2cbe89b9d4f7737895df82 100644 (file)
@@ -3470,7 +3470,8 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s,
          * slightly over allocate because we won't store those. But that isn't a
          * problem.
          */
          * slightly over allocate because we won't store those. But that isn't a
          * problem.
          */
-        raw = s->s3->tmp.ciphers_raw = OPENSSL_malloc(numciphers * n);
+        raw = OPENSSL_malloc(numciphers * TLS_CIPHER_LEN);
+        s->s3->tmp.ciphers_raw = raw;
         if (raw == NULL) {
             *al = SSL_AD_INTERNAL_ERROR;
             goto err;
         if (raw == NULL) {
             *al = SSL_AD_INTERNAL_ERROR;
             goto err;