[tor-commits] [tor/master] Preserve errno when loading encrypted ed25519 keys.

nickm at torproject.org nickm at torproject.org
Wed Jul 15 15:12:38 UTC 2015


commit 0a6997d78bdbf485f42acfa95558a91db3381d70
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Jul 14 10:23:07 2015 -0400

    Preserve errno when loading encrypted ed25519 keys.
---
 src/or/routerkeys.c |    6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/or/routerkeys.c b/src/or/routerkeys.c
index d075c67..97a586d 100644
--- a/src/or/routerkeys.c
+++ b/src/or/routerkeys.c
@@ -21,6 +21,7 @@ read_encrypted_secret_key(ed25519_secret_key_t *out,
   char pwbuf[256];
   uint8_t encrypted_key[256];
   char *tag = NULL;
+  int saved_errno = 0;
 
   ssize_t encrypted_len = crypto_read_tagged_contents_from_file(fname,
                                           ENC_KEY_HEADER,
@@ -28,6 +29,7 @@ read_encrypted_secret_key(ed25519_secret_key_t *out,
                                           encrypted_key,
                                           sizeof(encrypted_key));
   if (encrypted_len < 0) {
+    saved_errno = errno;
     log_info(LD_OR, "%s is missing", fname);
     r = 0;
     goto done;
@@ -46,6 +48,7 @@ read_encrypted_secret_key(ed25519_secret_key_t *out,
                                  pwbuf, pwlen);
     if (r == UNPWBOX_CORRUPTED) {
       log_err(LD_OR, "%s is corrupted.", fname);
+      saved_errno = EINVAL;
       goto done;
     } else if (r == UNPWBOX_OKAY) {
       break;
@@ -57,6 +60,7 @@ read_encrypted_secret_key(ed25519_secret_key_t *out,
 
   if (secret_len != ED25519_SECKEY_LEN) {
     log_err(LD_OR, "%s is corrupted.", fname);
+    saved_errno = EINVAL;
     goto done;
   }
   memcpy(out->seckey, secret, ED25519_SECKEY_LEN);
@@ -70,6 +74,8 @@ read_encrypted_secret_key(ed25519_secret_key_t *out,
     memwipe(secret, 0, secret_len);
     tor_free(secret);
   }
+  if (saved_errno)
+    errno = saved_errno;
   return r;
 }
 





More information about the tor-commits mailing list