dergoegge
c34bc01b2f
doc: clarify and cleanup macOS fuzzing notes
2025-11-24 07:10:06 -05:00
dergoegge and MarcoFalke
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
dergoegge and Vasil 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