Browse Source

Avoid a malloc/free pair for each (server-side) ntor handshake

Closes ticket 25150
Nick Mathewson 6 years ago
parent
commit
e3d4154486
2 changed files with 6 additions and 3 deletions
  1. 4 0
      changes/feature25150
  2. 2 3
      src/or/onion.c

+ 4 - 0
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.
+

+ 2 - 3
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;