Remove redundant calls to |OPENSSL_cleanse| and |OPENSSL_realloc_clean|.

Change-Id: I5c85c4d072ec157b37ed95b284a26ab32c0c42d9
Reviewed-on: https://boringssl-review.googlesource.com/19824
Reviewed-by: Martin Kreichgauer <martinkr@google.com>
Commit-Queue: Martin Kreichgauer <martinkr@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/asn1/a_bitstr.c b/crypto/asn1/a_bitstr.c
index 106dab1..3942638 100644
--- a/crypto/asn1/a_bitstr.c
+++ b/crypto/asn1/a_bitstr.c
@@ -217,8 +217,7 @@
         if (a->data == NULL)
             c = (unsigned char *)OPENSSL_malloc(w + 1);
         else
-            c = (unsigned char *)OPENSSL_realloc_clean(a->data,
-                                                       a->length, w + 1);
+            c = (unsigned char *)OPENSSL_realloc(a->data, w + 1);
         if (c == NULL) {
             OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
             return 0;
diff --git a/crypto/buf/buf.c b/crypto/buf/buf.c
index 1305c58..5addc79 100644
--- a/crypto/buf/buf.c
+++ b/crypto/buf/buf.c
@@ -82,11 +82,7 @@
     return;
   }
 
-  if (buf->data != NULL) {
-    OPENSSL_cleanse(buf->data, buf->max);
-    OPENSSL_free(buf->data);
-  }
-
+  OPENSSL_free(buf->data);
   OPENSSL_free(buf);
 }
 
@@ -109,17 +105,7 @@
     return 0;
   }
 
-  char *new_buf;
-  if (buf->data == NULL) {
-    new_buf = OPENSSL_malloc(alloc_size);
-  } else {
-    if (clean) {
-      new_buf = OPENSSL_realloc_clean(buf->data, buf->max, alloc_size);
-    } else {
-      new_buf = OPENSSL_realloc(buf->data, alloc_size);
-    }
-  }
-
+  char *new_buf = OPENSSL_realloc(buf->data, alloc_size);
   if (new_buf == NULL) {
     OPENSSL_PUT_ERROR(BUF, ERR_R_MALLOC_FAILURE);
     return 0;
diff --git a/crypto/cipher_extra/e_aesctrhmac.c b/crypto/cipher_extra/e_aesctrhmac.c
index 9c357f4..3a0de9b 100644
--- a/crypto/cipher_extra/e_aesctrhmac.c
+++ b/crypto/cipher_extra/e_aesctrhmac.c
@@ -102,9 +102,7 @@
 }
 
 static void aead_aes_ctr_hmac_sha256_cleanup(EVP_AEAD_CTX *ctx) {
-  struct aead_aes_ctr_hmac_sha256_ctx *aes_ctx = ctx->aead_state;
-  OPENSSL_cleanse(aes_ctx, sizeof(struct aead_aes_ctr_hmac_sha256_ctx));
-  OPENSSL_free(aes_ctx);
+  OPENSSL_free(ctx->aead_state);
 }
 
 static void hmac_update_uint64(SHA256_CTX *sha256, uint64_t value) {
diff --git a/crypto/cipher_extra/e_aesgcmsiv.c b/crypto/cipher_extra/e_aesgcmsiv.c
index 654705b..9de2300 100644
--- a/crypto/cipher_extra/e_aesgcmsiv.c
+++ b/crypto/cipher_extra/e_aesgcmsiv.c
@@ -592,9 +592,7 @@
 }
 
 static void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {
-  struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
-  OPENSSL_cleanse(gcm_siv_ctx, sizeof(struct aead_aes_gcm_siv_ctx));
-  OPENSSL_free(gcm_siv_ctx);
+  OPENSSL_free(ctx->aead_state);
 }
 
 // gcm_siv_crypt encrypts (or decrypts—it's the same thing) |in_len| bytes from
diff --git a/crypto/cipher_extra/e_chacha20poly1305.c b/crypto/cipher_extra/e_chacha20poly1305.c
index d80a910..64ab457 100644
--- a/crypto/cipher_extra/e_chacha20poly1305.c
+++ b/crypto/cipher_extra/e_chacha20poly1305.c
@@ -136,9 +136,7 @@
 }
 
 static void aead_chacha20_poly1305_cleanup(EVP_AEAD_CTX *ctx) {
-  struct aead_chacha20_poly1305_ctx *c20_ctx = ctx->aead_state;
-  OPENSSL_cleanse(c20_ctx->key, sizeof(c20_ctx->key));
-  OPENSSL_free(c20_ctx);
+  OPENSSL_free(ctx->aead_state);
 }
 
 static void poly1305_update_length(poly1305_state *poly1305, size_t data_len) {
diff --git a/crypto/cipher_extra/e_tls.c b/crypto/cipher_extra/e_tls.c
index 4b87983..72754c0 100644
--- a/crypto/cipher_extra/e_tls.c
+++ b/crypto/cipher_extra/e_tls.c
@@ -48,7 +48,6 @@
   AEAD_TLS_CTX *tls_ctx = (AEAD_TLS_CTX *)ctx->aead_state;
   EVP_CIPHER_CTX_cleanup(&tls_ctx->cipher_ctx);
   HMAC_CTX_cleanup(&tls_ctx->hmac_ctx);
-  OPENSSL_cleanse(&tls_ctx->mac_key, sizeof(tls_ctx->mac_key));
   OPENSSL_free(tls_ctx);
   ctx->aead_state = NULL;
 }
diff --git a/crypto/evp/p_ed25519_asn1.c b/crypto/evp/p_ed25519_asn1.c
index 37aebe0..65b4112 100644
--- a/crypto/evp/p_ed25519_asn1.c
+++ b/crypto/evp/p_ed25519_asn1.c
@@ -24,12 +24,8 @@
 
 
 static void ed25519_free(EVP_PKEY *pkey) {
-  if (pkey->pkey.ptr != NULL) {
-    ED25519_KEY *key = pkey->pkey.ptr;
-    OPENSSL_cleanse(key, sizeof(ED25519_KEY));
-    OPENSSL_free(key);
-    pkey->pkey.ptr = NULL;
-  }
+  OPENSSL_free(pkey->pkey.ptr);
+  pkey->pkey.ptr = NULL;
 }
 
 static int set_pubkey(EVP_PKEY *pkey, const uint8_t pubkey[32]) {
diff --git a/crypto/fipsmodule/bn/bn.c b/crypto/fipsmodule/bn/bn.c
index 9ba1913..4ed6ab0 100644
--- a/crypto/fipsmodule/bn/bn.c
+++ b/crypto/fipsmodule/bn/bn.c
@@ -108,16 +108,18 @@
   }
 
   if (bn->d != NULL) {
-    OPENSSL_cleanse(bn->d, bn->dmax * sizeof(bn->d[0]));
     if ((bn->flags & BN_FLG_STATIC_DATA) == 0) {
       OPENSSL_free(bn->d);
+    } else {
+      OPENSSL_cleanse(bn->d, bn->dmax * sizeof(bn->d[0]));
     }
   }
 
   should_free = (bn->flags & BN_FLG_MALLOCED) != 0;
-  OPENSSL_cleanse(bn, sizeof(BIGNUM));
   if (should_free) {
     OPENSSL_free(bn);
+  } else {
+    OPENSSL_cleanse(bn, sizeof(BIGNUM));
   }
 }
 
diff --git a/crypto/fipsmodule/bn/exponentiation.c b/crypto/fipsmodule/bn/exponentiation.c
index ae78ff9..f4e028b 100644
--- a/crypto/fipsmodule/bn/exponentiation.c
+++ b/crypto/fipsmodule/bn/exponentiation.c
@@ -1168,10 +1168,7 @@
 err:
   BN_MONT_CTX_free(new_mont);
   BN_clear_free(new_a);
-  if (powerbuf != NULL) {
-    OPENSSL_cleanse(powerbuf, powerbufLen);
-    OPENSSL_free(powerbufFree);
-  }
+  OPENSSL_free(powerbufFree);
   return (ret);
 }
 
diff --git a/crypto/fipsmodule/bn/random.c b/crypto/fipsmodule/bn/random.c
index 64e7605..2257da0 100644
--- a/crypto/fipsmodule/bn/random.c
+++ b/crypto/fipsmodule/bn/random.c
@@ -188,11 +188,8 @@
   ret = 1;
 
 err:
-  if (buf != NULL) {
-    OPENSSL_cleanse(buf, bytes);
-    OPENSSL_free(buf);
-  }
-  return (ret);
+  OPENSSL_free(buf);
+  return ret;
 }
 
 int BN_rand(BIGNUM *rnd, int bits, int top, int bottom) {
diff --git a/crypto/fipsmodule/cipher/cipher.c b/crypto/fipsmodule/cipher/cipher.c
index 8f0d788..00d8390 100644
--- a/crypto/fipsmodule/cipher/cipher.c
+++ b/crypto/fipsmodule/cipher/cipher.c
@@ -80,11 +80,8 @@
 }
 
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) {
-  if (c->cipher != NULL) {
-    if (c->cipher->cleanup) {
-      c->cipher->cleanup(c);
-    }
-    OPENSSL_cleanse(c->cipher_data, c->cipher->ctx_size);
+  if (c->cipher != NULL && c->cipher->cleanup) {
+    c->cipher->cleanup(c);
   }
   OPENSSL_free(c->cipher_data);
 
diff --git a/crypto/fipsmodule/cipher/e_aes.c b/crypto/fipsmodule/cipher/e_aes.c
index bd9847c..b469276 100644
--- a/crypto/fipsmodule/cipher/e_aes.c
+++ b/crypto/fipsmodule/cipher/e_aes.c
@@ -1197,9 +1197,7 @@
 }
 
 static void aead_aes_gcm_cleanup(EVP_AEAD_CTX *ctx) {
-  struct aead_aes_gcm_ctx *gcm_ctx = ctx->aead_state;
-  OPENSSL_cleanse(gcm_ctx, sizeof(struct aead_aes_gcm_ctx));
-  OPENSSL_free(gcm_ctx);
+  OPENSSL_free(ctx->aead_state);
 }
 
 static int aead_aes_gcm_seal_scatter(const EVP_AEAD_CTX *ctx, uint8_t *out,
@@ -1366,9 +1364,7 @@
 }
 
 static void aead_aes_gcm_tls12_cleanup(EVP_AEAD_CTX *ctx) {
-  struct aead_aes_gcm_tls12_ctx *gcm_ctx = ctx->aead_state;
-  OPENSSL_cleanse(gcm_ctx, sizeof(struct aead_aes_gcm_tls12_ctx));
-  OPENSSL_free(gcm_ctx);
+  OPENSSL_free(ctx->aead_state);
 }
 
 static int aead_aes_gcm_tls12_seal_scatter(
diff --git a/crypto/fipsmodule/digest/digest.c b/crypto/fipsmodule/digest/digest.c
index f8a0dd2..886c910 100644
--- a/crypto/fipsmodule/digest/digest.c
+++ b/crypto/fipsmodule/digest/digest.c
@@ -91,7 +91,6 @@
 
 int EVP_MD_CTX_cleanup(EVP_MD_CTX *ctx) {
   if (ctx->digest && ctx->digest->ctx_size && ctx->md_data) {
-    OPENSSL_cleanse(ctx->md_data, ctx->digest->ctx_size);
     OPENSSL_free(ctx->md_data);
   }
 
diff --git a/crypto/fipsmodule/ec/ec.c b/crypto/fipsmodule/ec/ec.c
index d82e58f..a39ca59 100644
--- a/crypto/fipsmodule/ec/ec.c
+++ b/crypto/fipsmodule/ec/ec.c
@@ -635,7 +635,6 @@
 
   ec_GFp_simple_point_clear_finish(point);
 
-  OPENSSL_cleanse(point, sizeof *point);
   OPENSSL_free(point);
 }
 
diff --git a/crypto/fipsmodule/ec/ec_key.c b/crypto/fipsmodule/ec/ec_key.c
index e5e8b1a..bba4402 100644
--- a/crypto/fipsmodule/ec/ec_key.c
+++ b/crypto/fipsmodule/ec/ec_key.c
@@ -156,7 +156,6 @@
 
   CRYPTO_free_ex_data(g_ec_ex_data_class_bss_get(), r, &r->ex_data);
 
-  OPENSSL_cleanse((void *)r, sizeof(EC_KEY));
   OPENSSL_free(r);
 }
 
diff --git a/crypto/fipsmodule/rsa/rsa_impl.c b/crypto/fipsmodule/rsa/rsa_impl.c
index f8cb9e3..b89eccb 100644
--- a/crypto/fipsmodule/rsa/rsa_impl.c
+++ b/crypto/fipsmodule/rsa/rsa_impl.c
@@ -200,10 +200,7 @@
     BN_CTX_end(ctx);
     BN_CTX_free(ctx);
   }
-  if (buf != NULL) {
-    OPENSSL_cleanse(buf, rsa_size);
-    OPENSSL_free(buf);
-  }
+  OPENSSL_free(buf);
 
   return ret;
 }
@@ -360,10 +357,7 @@
   ret = 1;
 
 err:
-  if (buf != NULL) {
-    OPENSSL_cleanse(buf, rsa_size);
-    OPENSSL_free(buf);
-  }
+  OPENSSL_free(buf);
 
   return ret;
 }
@@ -423,8 +417,7 @@
   }
 
 err:
-  if (padding != RSA_NO_PADDING && buf != NULL) {
-    OPENSSL_cleanse(buf, rsa_size);
+  if (padding != RSA_NO_PADDING) {
     OPENSSL_free(buf);
   }
 
diff --git a/crypto/mem.c b/crypto/mem.c
index 1c19122..09f3159 100644
--- a/crypto/mem.c
+++ b/crypto/mem.c
@@ -126,16 +126,6 @@
   return ret;
 }
 
-void *OPENSSL_realloc_clean(void *orig_ptr, size_t old_size, size_t new_size) {
-  void *ptr = ((uint8_t *)orig_ptr) - OPENSSL_MALLOC_PREFIX;
-  size_t actual_size = *(size_t *)ptr;
-  if (actual_size != old_size) {
-    return NULL;
-  }
-
-  return OPENSSL_realloc(orig_ptr, new_size);
-}
-
 void OPENSSL_cleanse(void *ptr, size_t len) {
 #if defined(OPENSSL_WINDOWS)
   SecureZeroMemory(ptr, len);
diff --git a/crypto/pem/pem_info.c b/crypto/pem/pem_info.c
index 57c87d4..d707e42 100644
--- a/crypto/pem/pem_info.c
+++ b/crypto/pem/pem_info.c
@@ -297,7 +297,6 @@
                             unsigned char *kstr, int klen,
                             pem_password_cb *cb, void *u)
 {
-    EVP_CIPHER_CTX ctx;
     int i, ret = 0;
     unsigned char *data = NULL;
     const char *objstr = NULL;
@@ -374,8 +373,7 @@
 
     ret = 1;
 
- err:
-    OPENSSL_cleanse((char *)&ctx, sizeof(ctx));
-    OPENSSL_cleanse(buf, PEM_BUFSIZE);
-    return (ret);
+err:
+  OPENSSL_cleanse(buf, PEM_BUFSIZE);
+  return ret;
 }
diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c
index 8b7932e..afa39d7 100644
--- a/crypto/pem/pem_lib.c
+++ b/crypto/pem/pem_lib.c
@@ -343,10 +343,7 @@
     OPENSSL_cleanse(iv, sizeof(iv));
     OPENSSL_cleanse((char *)&ctx, sizeof(ctx));
     OPENSSL_cleanse(buf, PEM_BUFSIZE);
-    if (data != NULL) {
-        OPENSSL_cleanse(data, (unsigned int)dsize);
-        OPENSSL_free(data);
-    }
+    OPENSSL_free(data);
     return (ret);
 }
 
@@ -562,7 +559,6 @@
     EVP_EncodeFinal(&ctx, buf, &outl);
     if ((outl > 0) && (BIO_write(bp, (char *)buf, outl) != outl))
         goto err;
-    OPENSSL_cleanse(buf, PEM_BUFSIZE * 8);
     OPENSSL_free(buf);
     buf = NULL;
     if ((BIO_write(bp, "-----END ", 9) != 9) ||
@@ -572,7 +568,6 @@
     return (i + outl);
  err:
     if (buf) {
-        OPENSSL_cleanse(buf, PEM_BUFSIZE * 8);
         OPENSSL_free(buf);
     }
     OPENSSL_PUT_ERROR(PEM, reason);
diff --git a/crypto/pem/pem_pkey.c b/crypto/pem/pem_pkey.c
index 9667550..9fbaeef 100644
--- a/crypto/pem/pem_pkey.c
+++ b/crypto/pem/pem_pkey.c
@@ -140,7 +140,6 @@
 
  err:
     OPENSSL_free(nm);
-    OPENSSL_cleanse(data, len);
     OPENSSL_free(data);
     return (ret);
 }
diff --git a/crypto/pkcs8/pkcs8.c b/crypto/pkcs8/pkcs8.c
index 388d65e..94205e6 100644
--- a/crypto/pkcs8/pkcs8.c
+++ b/crypto/pkcs8/pkcs8.c
@@ -214,14 +214,8 @@
   ret = 1;
 
 err:
-  if (I != NULL) {
-    OPENSSL_cleanse(I, I_len);
-    OPENSSL_free(I);
-  }
-  if (pass_raw != NULL) {
-    OPENSSL_cleanse(pass_raw, pass_raw_len);
-    OPENSSL_free(pass_raw);
-  }
+  OPENSSL_free(I);
+  OPENSSL_free(pass_raw);
   EVP_MD_CTX_cleanup(&ctx);
   return ret;
 }
@@ -431,7 +425,6 @@
   CBS pki;
   CBS_init(&pki, out, out_len);
   EVP_PKEY *ret = EVP_parse_private_key(&pki);
-  OPENSSL_cleanse(out, out_len);
   OPENSSL_free(out);
   return ret;
 }
@@ -513,10 +506,7 @@
   ret = 1;
 
 err:
-  if (plaintext != NULL) {
-    OPENSSL_cleanse(plaintext, plaintext_len);
-    OPENSSL_free(plaintext);
-  }
+  OPENSSL_free(plaintext);
   OPENSSL_free(salt_buf);
   EVP_CIPHER_CTX_cleanup(&ctx);
   return ret;
diff --git a/crypto/x509/a_sign.c b/crypto/x509/a_sign.c
index b3ea1de..6c7f713 100644
--- a/crypto/x509/a_sign.c
+++ b/crypto/x509/a_sign.c
@@ -83,7 +83,7 @@
 {
     EVP_PKEY *pkey;
     unsigned char *buf_in = NULL, *buf_out = NULL;
-    size_t inl = 0, outl = 0, outll = 0;
+    size_t inl = 0, outl = 0;
 
     pkey = EVP_PKEY_CTX_get0_pkey(ctx->pctx);
 
@@ -96,7 +96,7 @@
     }
 
     inl = ASN1_item_i2d(asn, &buf_in, it);
-    outll = outl = EVP_PKEY_size(pkey);
+    outl = EVP_PKEY_size(pkey);
     buf_out = OPENSSL_malloc((unsigned int)outl);
     if ((buf_in == NULL) || (buf_out == NULL)) {
         outl = 0;
@@ -122,13 +122,7 @@
     signature->flags |= ASN1_STRING_FLAG_BITS_LEFT;
  err:
     EVP_MD_CTX_cleanup(ctx);
-    if (buf_in != NULL) {
-        OPENSSL_cleanse((char *)buf_in, (unsigned int)inl);
-        OPENSSL_free(buf_in);
-    }
-    if (buf_out != NULL) {
-        OPENSSL_cleanse((char *)buf_out, outll);
-        OPENSSL_free(buf_out);
-    }
+    OPENSSL_free(buf_in);
+    OPENSSL_free(buf_out);
     return (outl);
 }
diff --git a/crypto/x509/a_verify.c b/crypto/x509/a_verify.c
index d203fba..5b75167 100644
--- a/crypto/x509/a_verify.c
+++ b/crypto/x509/a_verify.c
@@ -109,10 +109,7 @@
     ret = 1;
 
 err:
-    if (buf_in != NULL) {
-        OPENSSL_cleanse(buf_in, inl);
-        OPENSSL_free(buf_in);
-    }
+    OPENSSL_free(buf_in);
     EVP_MD_CTX_cleanup(&ctx);
     return ret;
 }
diff --git a/include/openssl/mem.h b/include/openssl/mem.h
index 6c21512..7d7087e 100644
--- a/include/openssl/mem.h
+++ b/include/openssl/mem.h
@@ -87,11 +87,6 @@
 // allocated and the data at |ptr| is always wiped and freed.
 OPENSSL_EXPORT void *OPENSSL_realloc(void *ptr, size_t new_size);
 
-// OPENSSL_realloc_clean behaves exactly like |OPENSSL_realloc|.
-// TODO(martinkr): Remove.
-OPENSSL_EXPORT void *OPENSSL_realloc_clean(void *ptr, size_t old_size,
-                                           size_t new_size);
-
 // OPENSSL_cleanse zeros out |len| bytes of memory at |ptr|. This is similar to
 // |memset_s| from C11.
 OPENSSL_EXPORT void OPENSSL_cleanse(void *ptr, size_t len);
diff --git a/ssl/handshake.cc b/ssl/handshake.cc
index 5770d6f..cef8a15 100644
--- a/ssl/handshake.cc
+++ b/ssl/handshake.cc
@@ -159,11 +159,7 @@
   OPENSSL_free(server_params);
   ssl->ctx->x509_method->hs_flush_cached_ca_names(this);
   OPENSSL_free(certificate_types);
-
-  if (key_block != NULL) {
-    OPENSSL_cleanse(key_block, key_block_len);
-    OPENSSL_free(key_block);
-  }
+  OPENSSL_free(key_block);
 }
 
 SSL_HANDSHAKE *ssl_handshake_new(SSL *ssl) {
diff --git a/ssl/handshake_client.cc b/ssl/handshake_client.cc
index 18dd58f..8e45331 100644
--- a/ssl/handshake_client.cc
+++ b/ssl/handshake_client.cc
@@ -1367,7 +1367,6 @@
       OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
       goto err;
     }
-    OPENSSL_cleanse(pms, pms_len);
     OPENSSL_free(pms);
     pms = new_pms;
     pms_len = new_pms_len;
@@ -1385,19 +1384,14 @@
     goto err;
   }
   hs->new_session->extended_master_secret = hs->extended_master_secret;
-  OPENSSL_cleanse(pms, pms_len);
   OPENSSL_free(pms);
 
   hs->state = state_send_client_certificate_verify;
   return ssl_hs_ok;
 
 err:
-  if (pms != NULL) {
-    OPENSSL_cleanse(pms, pms_len);
-    OPENSSL_free(pms);
-  }
+  OPENSSL_free(pms);
   return ssl_hs_error;
-
 }
 
 static enum ssl_hs_wait_t do_send_client_certificate_verify(SSL_HANDSHAKE *hs) {
diff --git a/ssl/ssl_session.cc b/ssl/ssl_session.cc
index e885324..0e6c66c 100644
--- a/ssl/ssl_session.cc
+++ b/ssl/ssl_session.cc
@@ -983,7 +983,6 @@
   CRYPTO_BUFFER_free(session->ocsp_response);
   OPENSSL_free(session->psk_identity);
   OPENSSL_free(session->early_alpn);
-  OPENSSL_cleanse(session, sizeof(*session));
   OPENSSL_free(session);
 }