From ff4bcaed81017cccb589cd392d47ca83d6a392bf Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 27 Jul 2017 18:18:20 +0100 Subject: [PATCH 1/3] blockchain: pass correct height to get_block_longhash --- src/cryptonote_core/blockchain.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 745608b9..742e1ac3 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -3541,19 +3541,17 @@ void Blockchain::set_enforce_dns_checkpoints(bool enforce_checkpoints) } //------------------------------------------------------------------ -void Blockchain::block_longhash_worker(const uint64_t height, const std::vector &blocks, std::unordered_map &map) const +void Blockchain::block_longhash_worker(uint64_t height, const std::vector &blocks, std::unordered_map &map) const { TIME_MEASURE_START(t); slow_hash_allocate_state(); - //FIXME: height should be changing here, as get_block_longhash expects - // the height of the block passed to it for (const auto & block : blocks) { if (m_cancel) return; crypto::hash id = get_block_hash(block); - crypto::hash pow = get_block_longhash(block, height); + crypto::hash pow = get_block_longhash(block, height++); map.emplace(id, pow); } From 91aa90fc7914d9ece44ff6179f126ae2e5ba848b Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 27 Jul 2017 18:18:49 +0100 Subject: [PATCH 2/3] blockchain: ensure all blocks get their longhash precalculated If the number of blocks to check was not a multiple of the number of preparation threads, the last few blocks would not be included in the threaded long hash calculation. Those would still get calculated when the block gets added to the chain, however, so this was only a tiny performance hit, rather than a security bug. --- src/cryptonote_core/blockchain.cpp | 4 +++- src/cryptonote_core/blockchain.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 742e1ac3..1313f914 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -3743,9 +3743,11 @@ bool Blockchain::prepare_handle_incoming_blocks(const std::list &blocks, + void block_longhash_worker(uint64_t height, const std::vector &blocks, std::unordered_map &map) const; /** From d8becf2ee1554948849a3313df3f1afb50491233 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Fri, 28 Jul 2017 10:19:17 +0100 Subject: [PATCH 3/3] blockchain: fix cryptonight buffer leak on exit --- src/cryptonote_core/blockchain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cryptonote_core/blockchain.cpp b/src/cryptonote_core/blockchain.cpp index 1313f914..435a3fc0 100644 --- a/src/cryptonote_core/blockchain.cpp +++ b/src/cryptonote_core/blockchain.cpp @@ -3549,7 +3549,7 @@ void Blockchain::block_longhash_worker(uint64_t height, const std::vector for (const auto & block : blocks) { if (m_cancel) - return; + break; crypto::hash id = get_block_hash(block); crypto::hash pow = get_block_longhash(block, height++); map.emplace(id, pow);