[tor-commits] [tor/master] Avoid a malloc/free pair for each (server-side) ntor handshake

nickm at torproject.org nickm at torproject.org
Fri Feb 16 01:56:22 UTC 2018


commit e3d4154486b278e1ee68f97c3445817759b0f73c
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Feb 5 11:50:16 2018 -0500

    Avoid a malloc/free pair for each (server-side) ntor handshake
    
    Closes ticket 25150
---
 changes/feature25150 | 4 ++++
 src/or/onion.c       | 5 ++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/changes/feature25150 b/changes/feature25150
new file mode 100644
index 000000000..eb65327a8
--- /dev/null
+++ b/changes/feature25150
@@ -0,0 +1,4 @@
+  o Minor features (performance, allocation):
+    - Avoid a needless malloc()/free() pair every time we handle an ntor
+      handshake. Closes ticket 25150.
+
diff --git a/src/or/onion.c b/src/or/onion.c
index bd80c2f50..4fc501383 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -563,20 +563,19 @@ onion_skin_server_handshake(int type,
       return -1;
     {
       size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
-      uint8_t *keys_tmp = tor_malloc(keys_out_len + DIGEST_LEN);
+      uint8_t keys_tmp[keys_tmp_len];
 
       if (onion_skin_ntor_server_handshake(
                                    onion_skin, keys->curve25519_key_map,
                                    keys->junk_keypair,
                                    keys->my_identity,
                                    reply_out, keys_tmp, keys_tmp_len)<0) {
-        tor_free(keys_tmp);
+        /* no need to memwipe here, since the output will never be used */
         return -1;
       }
       memcpy(keys_out, keys_tmp, keys_out_len);
       memcpy(rend_nonce_out, keys_tmp+keys_out_len, DIGEST_LEN);
       memwipe(keys_tmp, 0, keys_tmp_len);
-      tor_free(keys_tmp);
       r = NTOR_REPLY_LEN;
     }
     break;





More information about the tor-commits mailing list