mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 12:32:48 +01:00
Merge #12561: Check for block corruption in ConnectBlock()
0e7c52d
Shut down if trying to connect a corrupted block (Suhas Daftuar)
Pull request description:
(Updated OP after reworking the approach)
Shut down if a corrupted block is found in ConnectBlock(). This prevents an infinite loop trying to connect such a block, and alerts the node operator that there may be potential hardware failure.
Tree-SHA512: f20d56aa9d36d6eeff4c3d13c0fbd14f06a57701bd13c2416d36f0cc4235f81f752139e336a073617e8e803782c5096c960108af122b19a51227de512e9095ee
This commit is contained in:
parent
b25feef8ef
commit
ca0ed8dcfb
@ -2012,8 +2012,15 @@ bool CChainState::ConnectBlock(const CBlock& block, CValidationState& state, CBl
|
|||||||
// is enforced in ContextualCheckBlockHeader(); we wouldn't want to
|
// is enforced in ContextualCheckBlockHeader(); we wouldn't want to
|
||||||
// re-enforce that rule here (at least until we make it impossible for
|
// re-enforce that rule here (at least until we make it impossible for
|
||||||
// GetAdjustedTime() to go backward).
|
// GetAdjustedTime() to go backward).
|
||||||
if (!CheckBlock(block, state, chainparams.GetConsensus(), !fJustCheck, !fJustCheck))
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), !fJustCheck, !fJustCheck)) {
|
||||||
|
if (state.CorruptionPossible()) {
|
||||||
|
// We don't write down blocks to disk if they may have been
|
||||||
|
// corrupted, so this should be impossible unless we're having hardware
|
||||||
|
// problems.
|
||||||
|
return AbortNode(state, "Corrupt block found indicating potential hardware failure; shutting down");
|
||||||
|
}
|
||||||
return error("%s: Consensus::CheckBlock: %s", __func__, FormatStateMessage(state));
|
return error("%s: Consensus::CheckBlock: %s", __func__, FormatStateMessage(state));
|
||||||
|
}
|
||||||
|
|
||||||
if (pindex->pprev && pindex->phashBlock && llmq::chainLocksHandler->HasConflictingChainLock(pindex->nHeight, pindex->GetBlockHash())) {
|
if (pindex->pprev && pindex->phashBlock && llmq::chainLocksHandler->HasConflictingChainLock(pindex->nHeight, pindex->GetBlockHash())) {
|
||||||
return state.DoS(10, error("%s: conflicting with chainlock", __func__), REJECT_INVALID, "bad-chainlock");
|
return state.DoS(10, error("%s: conflicting with chainlock", __func__), REJECT_INVALID, "bad-chainlock");
|
||||||
|
Loading…
Reference in New Issue
Block a user