Commit Graph
100 Commits
Author SHA1 Message Date
dergoegge c34bc01b2f doc: clarify and cleanup macOS fuzzing notes 2025-11-24 07:10:06 -05:00
dergoeggeandMarcoFalke 3b23f95e34 ci: limit max stack size to 512 KiB
Co-authored-by: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz>
2025-07-29 10:29:19 +01:00
dergoegge 7dc43ea503 test: Add msgtype to msg_generic slots 2025-06-30 11:13:11 +01:00
dergoegge ad132761fc [allocators] Apply manual ASan poisoning to PoolResource 2025-05-23 10:09:39 +01:00
dergoegge e94c9d1712 [doc] Amend notes on benchmarking 2025-01-22 16:50:16 +01:00
Niklas Gögge 16b140f225 doc: correct libfuzzer-nosan preset flag 2024-12-02 10:27:14 +00:00
dergoegge b031b7910d [ci] Split out native fuzz jobs for macOS and windows 2024-11-25 10:41:17 +00:00
dergoegge 9f243cd7fa Introduce g_fuzzing global for fuzzing checks 2024-10-25 13:12:55 +01:00
dergoegge f859ff8a4e [validation] Improve script check error reporting 2024-10-16 10:18:48 +01:00
dergoegge afd237bb5d [fuzz] Harness for version handshake 2024-07-31 13:25:52 +01:00
dergoegge a90ab4aec9 scripted-diff: Rename lazily initialized bloom filters
-BEGIN VERIFY SCRIPT-
sed -i 's/m_recent_confirmed_transactions/m_lazy_recent_confirmed_transactions/g' $(git grep -l 'm_recent_confirmed_transactions')
sed -i 's/m_recent_rejects_reconsiderable/m_lazy_recent_rejects_reconsiderable/g' $(git grep -l 'm_recent_rejects_reconsiderable')
sed -i 's/m_recent_rejects/m_lazy_recent_rejects/g' $(git grep -l 'm_recent_rejects')
-END VERIFY SCRIPT-
2024-07-31 13:23:46 +01:00
dergoegge 82de1bc478 [net processing] Lazily initialize m_recent_confirmed_transactions 2024-07-31 13:09:55 +01:00
dergoegge fa0c87f19c [net processing] Lazily initialize m_recent_rejects_reconsiderable 2024-07-31 13:09:44 +01:00
dergoegge 662e8db2d3 [net processing] Lazily initialize m_recent_rejects 2024-07-31 13:08:20 +01:00
dergoegge e009bf681c Don't use iterator addresses in IteratorComparator
The addresses of the iterator values are non-deterministic (i.e. they
depend on where the values were allocated). This causes stability issues
when fuzzing (e.g. in the `txorphan` and `mini_miner` harnesses), due
the orders (derived from IteratorComparator) not being deterministic.

Improve stability by comparing the first element in the iterator value
pair instead of using the the value addresses.
2024-06-19 10:14:31 +01:00
dergoegge a7fceda68b [fuzz] Make peeking through FuzzedSock::Recv fuzzer friendly
FuzzedSock only supports peeking at one byte at a time, which is not
fuzzer friendly when trying to receive long data.

Fix this by supporting peek data of arbitrary length instead of only one
byte.
2024-06-03 10:32:43 +01:00
dergoegge 865cdf3692 [fuzz] Use fuzzer friendly ConsumeRandomLengthByteVector in FuzzedSock::Recv
See comment on FuzzedDataProvider::ConsumeRandomLengthString.
2024-05-31 14:48:29 +01:00
dergoegge 949abebea0 [fuzz] Avoid collecting initialization coverage 2024-05-23 17:26:26 +01:00
dergoegge c2e0489b71 [rpc, bugfix] Enforce maximum value for setmocktime 2024-04-15 09:51:06 +01:00
dergoegge 92e72b5d0d [net processing] Move IgnoresIncomingTxs to PeerManagerInfo 2024-04-10 17:01:27 +02:00
dergoegge 7d9c3ec622 [net processing] Introduce PeerManagerInfo
For querying statistics/info from PeerManager. The median outbound time
offset is the only initial field.
2024-04-10 17:01:27 +02:00
dergoegge 038fd979ef [net processing] Move nTimeOffset to net_processing 2024-04-10 16:15:46 +02:00
78407b99ed [clang-tidy] Enable the misc-no-recursion check
Co-authored-by: stickies-v <stickies-v@protonmail.com>
Co-authored-by: Gloria Zhao <gloriajzhao@gmail.com>
2024-04-07 14:04:45 +01:00
dergoegge 738a53720e [fuzz] Apply fuzz env (suppressions, etc.) when fetching harness list 2024-03-07 10:28:20 +00:00
dergoegge d8087adc7e [test] IsBlockMutated unit tests 2024-02-27 14:19:15 +00:00
dergoegge 1ed2c98297 Add transaction_identifier::size to allow Span conversion 2024-02-27 14:19:15 +00:00
dergoegge 1ec6bbeb8d [validation] Cache merkle root and witness commitment checks
Slight performance improvement by avoiding duplicate work.
2024-02-27 14:19:15 +00:00
dergoegge 5bf4f5ba32 [test] Add regression test for #27608 2024-02-27 14:19:15 +00:00
dergoegge 49257c0304 [net processing] Don't process mutated blocks
We preemptively perform a block mutation check before further processing
a block message (similar to early sanity checks on other messsage
types). The main reasons for this change are as follows:

- `CBlock::GetHash()` is a foot-gun without a prior mutation check, as
  the hash returned only commits to the header but not to the actual
  transactions (`CBlock::vtx`) contained in the block.
- We have observed attacks that abused mutated blocks in the past, which
  could have been prevented by simply not processing mutated blocks
  (e.g. https://github.com/bitcoin/bitcoin/pull/27608).
2024-02-27 14:19:15 +00:00
dergoegge 2d8495e080 [validation] Merkle root malleation should be caught by IsBlockMutated 2024-02-27 14:19:15 +00:00
dergoegge 66abce1d98 [validation] Introduce IsBlockMutated 2024-02-27 14:19:15 +00:00
dergoegge e7669e1343 [refactor] Cleanup merkle root checks 2024-02-27 14:19:14 +00:00
dergoegge 95bddb930a [validation] Isolate merkle root checks 2024-02-27 14:17:32 +00:00
dergoegge 9d09c873a5 fuzz: Exit and log stderr for parse_test_list errors 2024-01-24 11:42:30 +00:00
dergoegge 154fcce55c [fuzz] Improve fuzzing stability for ellswift_roundtrip harness
`CPubKey::VerifyPubKey` uses rng internally which leads to instability
in the fuzz test.

We fix this by avoiding `VerifyPubKey` in the test and verifying the
decoded public key with a fuzzer chosen message instead.
2024-01-10 16:21:16 +00:00
dergoegge ff9039f6ea Remove GetAdjustedTime 2024-01-05 17:16:38 +00:00
dergoegge b2fc7a2eda [fuzz] Improve fuzzing stability for minisketch harness
* Seed minisketch rng
* Use fuzzer chosen minisketch impl instead of benchmarking for the best
  impl
2023-12-14 20:10:21 +00:00
dergoegge 15f5a0d0c8 fuzz: Improve fuzzing stability for txorphan harness 2023-12-08 13:14:46 +00:00
dergoegge 9f265d8825 fuzz: Detect deadlocks in process_message 2023-12-06 16:04:21 +00:00
dergoegge 9e58c5bcd9 Use Txid in COutpoint 2023-11-21 13:15:44 +00:00
dergoegge af1d2ff883 [primitives] Precompute result of CTransaction::HasWitness 2023-11-01 15:15:05 +00:00
dergoeggeandVasil Dimov cf70a8d565 [net] Check i2p private key constraints
Co-authored-by: Vasil Dimov <vd@FreeBSD.org>
2023-10-26 16:50:50 +01:00
dergoegge dd4dcbd4cd [fuzz] Delete i2p target 2023-10-20 14:03:34 +01:00
dergoegge 940a49978c Use type-safe txid types in orphanage 2023-10-12 11:56:37 +01:00
dergoegge ed70e65016 Introduce types for txids & wtxids 2023-10-12 11:56:37 +01:00
dergoegge cdb14d79e8 [net processing] Use HasWitness over comparing (w)txids 2023-10-09 13:22:12 +01:00
dergoegge 4cafe9f176 [test] Make PeerManager's rng deterministic in tests 2023-10-04 13:16:53 +01:00
dergoegge fecec3e1c6 [net processing] FeeFilterRounder doesn't own a FastRandomContext 2023-10-04 13:16:52 +01:00
dergoegge 47520ed209 [net processing] Make fee filter rounder non-global 2023-10-04 13:14:05 +01:00
dergoegge 77506f4ac6 [net processing] Addr shuffle uses PeerManager's rng 2023-10-03 11:23:24 +01:00
dergoegge a648dd79e5 [net processing] PushAddress uses PeerManager's rng 2023-10-03 11:23:24 +01:00
dergoegge 87c706713e [net processing] PeerManager holds a FastRandomContext 2023-10-03 11:23:24 +01:00
dergoegge 508d05f8a7 [fuzz] Don't use afl++ deferred forkserver mode
Deferring the forkserver initialization doesn't make sense for some of
our targets since they involve state that can't be forked (e.g.
threads). We therefore remove the use of __AFL_INIT entirely.

We also increase the __AFL_LOOP count to 100000. Our fuzz targets are
meant to all be deterministic and stateless therefore this should be
fine.
2023-09-14 16:58:19 +01:00
dergoegge 97e2e1d641 [fuzz] Use afl++ shared-memory fuzzing
Using shared-memory is faster than reading from stdin, see
https://github.com/AFLplusplus/AFLplusplus/blob/7d2122e0596132f9344a5d0896020ebc79cd33db/instrumentation/README.persistent_mode.md
2023-09-12 15:07:07 +01:00
dergoegge 23c7b51ddd [net processing] Move -capturemessages to PeerManager::Options 2023-07-24 18:35:30 +02:00
dergoegge bd59bda26b [net processing] Move -blockreconstructionextratxn to PeerManager::Options 2023-07-24 18:35:30 +02:00
dergoegge 567c4e0b6a [net processing] Move -maxorphantx to PeerManager::Options 2023-07-24 18:35:30 +02:00
dergoegge fa9e6d80d1 [net processing] Move -txreconciliation to PeerManager::Options 2023-07-24 18:35:28 +02:00
dergoegge 4cfb7b925f [net processing] Use ignore_incoming_txs from m_opts 2023-07-24 18:31:16 +02:00
dergoegge 8b87725921 [net processing] Introduce PeerManager options 2023-07-24 18:30:59 +02:00
dergoegge 71200ac390 [fuzz] Only check duplicate coinbase script when block was valid 2023-06-03 15:37:11 +02:00
dergoegge 9143b6988b [doc] Add post branch-off note about fuzz input pruning 2023-05-04 19:39:57 +02:00
dergoegge 3fa4c54ac5 [net processing] Pass TxRelay to FindTxForGetData instead of Peer 2023-03-31 13:19:20 +02:00
dergoegge c85ee76a36 [net processin] Don't take cs_main in FindTxForGetData
Taking cs_main is no longer necessary since we moved
`m_recently_announced_invs` to `Peer` and `mapRelay` is actually only
accessed from the message processing thread.
2023-03-31 13:18:39 +02:00
dergoegge 3a060ae7b6 scripted-diff: Rename nUnconnectingHeaders and fPreferHeaders
-BEGIN VERIFY SCRIPT-
ren() { sed -i "s:\<$1\>:$2:g" $(git grep -l "\<$1\>" ./src ./test); }

ren nUnconnectingHeaders     m_num_unconnecting_headers_msgs
ren fPreferHeaders           m_prefers_headers
ren MAX_UNCONNECTING_HEADERS MAX_NUM_UNCONNECTING_HEADERS_MSGS

-END VERIFY SCRIPT-
2023-03-30 14:56:34 +02:00
dergoegge 279c53d7e4 [net processing] Move m_recently_announced_invs from CNodeState to Peer 2023-03-30 14:56:19 +02:00
dergoegge 938a8e2566 [net processing] Annotate m_recently_announced_invs as guarded by g_msgproc_mutex 2023-03-30 14:56:19 +02:00
dergoegge 8a2cb1f749 [net processing] Move fPreferHeaders from CNodeState to Peer 2023-03-30 14:56:19 +02:00
dergoegge 3605011e79 [net processing] Annotate fPreferHeaders as guarded by g_msgproc_mutex 2023-03-30 14:56:19 +02:00
dergoegge 4b84e502f5 [net processing] Move m_headers_sync_timeout from CNodeState to Peer 2023-03-30 14:56:19 +02:00
dergoegge 689b747fc3 [net processing] Annotate m_headers_sync_timeout as guarded by g_msgproc_mutex 2023-03-30 14:56:19 +02:00
dergoegge d8c0d1c345 [net processing] Move nUnconnectingHeaders from CNodeState to Peer 2023-03-30 14:56:17 +02:00
dergoegge 5f80d8d1ee [net processing] Annotate nUnconnectingHeaders as guarded by g_msgproc_mutex 2023-03-30 14:55:28 +02:00
dergoegge 1d87137227 [validation] Annotate ChainstateManager::m_best_header as guarded by cs_main 2023-03-30 14:55:28 +02:00
dergoegge cd0c8eeb09 [net] Pass nRecvFloodSize to CNode 2023-03-27 16:00:02 +02:00
dergoegge 860402ef2e [net] Remove trivial GetConnectionType() getter 2023-03-27 16:00:02 +02:00
dergoegge b5a85b365a [net] Delete CNetMessage copy constructor/assignment op 2023-03-27 16:00:01 +02:00
dergoegge 3566aa7d49 [net] Remove CNode friends
Both `CConnman` and `ConnmanTestMsg` no longer access private members of
`CNode`, we can therefore remove the friend relationship.
2023-03-22 13:18:57 +01:00
dergoegge 3eac5e7cd1 [net] Add CNode helper for send byte accounting 2023-03-22 13:18:57 +01:00
dergoegge 60441a3432 scripted-diff: [net] Rename CNode process queue members
-BEGIN VERIFY SCRIPT-
ren() { sed -i "s:\<$1\>:$2:g" $(git grep -l "\<$1\>" ./src ./test); }

ren cs_vProcessMsg    m_msg_process_queue_mutex
ren vProcessMsg       m_msg_process_queue
ren nProcessQueueSize m_msg_process_queue_size

-END VERIFY SCRIPT-
2023-03-22 13:18:56 +01:00
dergoegge 6693c499f7 [net] Make cs_vProcessMsg a non-recursive mutex 2023-03-22 13:18:32 +01:00
dergoegge 23d9352654 [net] Make CNode msg process queue members private
Now that all access to the process queue members is handled by methods
of `CNode` we can make these members private.
2023-03-22 13:18:32 +01:00
dergoegge 897e342d6e [net] Encapsulate CNode message polling 2023-03-22 13:18:30 +01:00
dergoegge cc5cdf8776 [net] Deduplicate marking received message for processing 2023-03-19 14:34:37 +01:00
dergoegge ad44aa5c64 [net] Add connection type getter to CNode 2023-03-19 14:34:36 +01:00
dergoegge 55c4795c57 [net processing] Use TxRelay::m_relay_txs over CNode::m_relays_txs 2023-03-16 18:23:49 +01:00
dergoegge 05eeba2c5f [test] Add manual prune startup test case 2023-03-13 13:10:11 +01:00
dergoegge 4517419628 [util] Avoid integer overflow in CheckDiskSpace 2023-03-10 15:50:26 +01:00
dergoegge a1c36275b5 [fuzz] Assert that omitting missing transactions always fails block reconstruction 2023-01-23 17:29:41 +01:00
dergoegge a8ac61ab5e [fuzz] Add PartiallyDownloadedBlock target 2023-01-23 17:29:41 +01:00
dergoegge 42bd4c7468 [block encodings] Avoid fuzz blocking asserts in PartiallyDownloadedBlock 2023-01-23 17:18:35 +01:00
dergoegge 1429f83770 [block encodings] Make CheckBlock mockable for PartiallyDownloadedBlock 2023-01-23 17:18:35 +01:00
dergoegge 9ab62d71fb [fuzz] Actually use mocked mempool in tx_pool target 2023-01-20 12:15:01 +01:00
dergoegge 3153e7d779 [fuzz] Add HeadersSyncState target 2022-12-12 21:06:04 +00:00
dergoegge 53552affca [headerssync] Make m_commit_offset protected 2022-12-12 21:06:04 +00:00
dergoegge 58c2bbdb55 [fuzz] Enable erlay in process_message(s) targets 2022-12-12 11:19:02 +00:00
dergoegge 8f2dac5409 [test] Add p2p_tx_privacy.py 2022-11-30 16:36:16 +00:00
dergoegge ce63fca13e [net processing] Assume that TxRelay::m_tx_inventory_to_send is empty pre-verack
This commit documents our assumption about
TxRelay::m_tx_inventory_to_send being empty prior to version handshake
completion.

The added Assume acts as testing oracle for our fuzzing tests to
potentially detect if the assumption is violated.
2022-11-30 12:22:05 +00:00
dergoegge 845e3a34c4 [net processing] Ensure transaction announcements are only queued for fully connected peers 2022-11-29 13:54:50 +00:00
dergoegge 0eeb9b0442 [fuzz] Move ConsumeNetAddr to fuzz/util/net.h 2022-11-17 14:52:45 +00:00