summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-11-06 11:17:01 +1000
committerteor <teor@torproject.org>2019-11-06 11:17:01 +1000
commitd2e4262ebc134f4c6ae9e702a14da45489575b4f (patch)
tree113a23a439de23ac40945d76931188fc1e89d4f2
parent6bfdd096792194d1077a101a34859bff996c940e (diff)
parent2da4d64a64a803f4b0a6d56e517b4288bef6c4f8 (diff)
downloadtor-d2e4262ebc134f4c6ae9e702a14da45489575b4f.tar.gz
tor-d2e4262ebc134f4c6ae9e702a14da45489575b4f.zip
Merge remote-tracking branch 'tor-github/pr/1340' into maint-0.3.5
-rw-r--r--changes/bug309164
-rw-r--r--src/feature/relay/router.c18
2 files changed, 12 insertions, 10 deletions
diff --git a/changes/bug30916 b/changes/bug30916
new file mode 100644
index 0000000000..b006bfc75d
--- /dev/null
+++ b/changes/bug30916
@@ -0,0 +1,4 @@
+ o Minor bugfixes (relay):
+ - Avoid crashing when starting with a corrupt keys directory where
+ the old ntor key and the new ntor key are identical. Fixes bug 30916;
+ bugfix on 0.2.4.8-alpha.
diff --git a/src/feature/relay/router.c b/src/feature/relay/router.c
index dad2c6a50f..1dbaf2ed66 100644
--- a/src/feature/relay/router.c
+++ b/src/feature/relay/router.c
@@ -278,19 +278,17 @@ construct_ntor_key_map(void)
{
di_digest256_map_t *m = NULL;
- if (!tor_mem_is_zero((const char*)
- curve25519_onion_key.pubkey.public_key,
- CURVE25519_PUBKEY_LEN)) {
- dimap_add_entry(&m,
- curve25519_onion_key.pubkey.public_key,
+ const uint8_t *cur_pk = curve25519_onion_key.pubkey.public_key;
+ const uint8_t *last_pk = last_curve25519_onion_key.pubkey.public_key;
+
+ if (!tor_mem_is_zero((const char *)cur_pk, CURVE25519_PUBKEY_LEN)) {
+ dimap_add_entry(&m, cur_pk,
tor_memdup(&curve25519_onion_key,
sizeof(curve25519_keypair_t)));
}
- if (!tor_mem_is_zero((const char*)
- last_curve25519_onion_key.pubkey.public_key,
- CURVE25519_PUBKEY_LEN)) {
- dimap_add_entry(&m,
- last_curve25519_onion_key.pubkey.public_key,
+ if (!tor_mem_is_zero((const char*)last_pk, CURVE25519_PUBKEY_LEN) &&
+ tor_memneq(cur_pk, last_pk, CURVE25519_PUBKEY_LEN)) {
+ dimap_add_entry(&m, last_pk,
tor_memdup(&last_curve25519_onion_key,
sizeof(curve25519_keypair_t)));
}