Commit 8e1bf98f authored by Nick Mathewson's avatar Nick Mathewson 🐘
Browse files

Log an error if openssl fails to copy a key for us

This should never happen unless openssl is buggy or some of our
assumptions are deeply wrong, but one of those might have been the
cause of the not-yet-reproducible bug 1209.  If it ever happens again,
let's get some info we can use.
parent e2b117eb
Loading
Loading
Loading
Loading
+4 −0
Changes for changes/copy_key_log_bug1209: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
 o Minor bugfixes
   - If OpenSSL fails to make a duplicate of a private or public key, log
     an error message and try to exit cleanly.  May help with debugging
     if bug 1209 ever remanifests.
+11 −0
Changes for src/common/crypto.c: 11 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -779,14 +779,25 @@ crypto_pk_env_t *
crypto_pk_copy_full(crypto_pk_env_t *env)
{
  RSA *new_key;
  int privatekey = 0;
  tor_assert(env);
  tor_assert(env->key);

  if (PRIVATE_KEY_OK(env)) {
    new_key = RSAPrivateKey_dup(env->key);
    privatekey = 1;
  } else {
    new_key = RSAPublicKey_dup(env->key);
  }
  if (!new_key) {
    log_err(LD_CRYPTO, "Unable to duplicate a %s key: openssl failed.",
            privatekey?"private":"public");
    crypto_log_errors(LOG_ERR,
                      privatekey ? "Duplicating a private key" :
                      "Duplicating a public key");
    tor_fragile_assert();
    return NULL;
  }

  return _crypto_new_pk_env_rsa(new_key);
}