Skip to content

Commit 53cf0d5

Browse files
kwvgPastaPastaPasta
authored andcommitted
merge bitcoin#21000: Add UBSan suppressions needed for fuzz tests to not warn under -fsanitize=integer
1 parent e982db2 commit 53cf0d5

File tree

3 files changed

+57
-21
lines changed

3 files changed

+57
-21
lines changed

src/test/fuzz/crypto_chacha20_poly1305_aead.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,24 @@ FUZZ_TARGET(crypto_chacha20_poly1305_aead)
4646
assert(ok);
4747
},
4848
[&] {
49+
if (AdditionOverflow(seqnr_payload, static_cast<uint64_t>(1))) {
50+
return;
51+
}
4952
seqnr_payload += 1;
5053
aad_pos += CHACHA20_POLY1305_AEAD_AAD_LEN;
5154
if (aad_pos + CHACHA20_POLY1305_AEAD_AAD_LEN > CHACHA20_ROUND_OUTPUT) {
5255
aad_pos = 0;
56+
if (AdditionOverflow(seqnr_aad, static_cast<uint64_t>(1))) {
57+
return;
58+
}
5359
seqnr_aad += 1;
5460
}
5561
},
5662
[&] {
57-
seqnr_payload = fuzzed_data_provider.ConsumeIntegral<int>();
63+
seqnr_payload = fuzzed_data_provider.ConsumeIntegral<uint64_t>();
5864
},
5965
[&] {
60-
seqnr_aad = fuzzed_data_provider.ConsumeIntegral<int>();
66+
seqnr_aad = fuzzed_data_provider.ConsumeIntegral<uint64_t>();
6167
},
6268
[&] {
6369
is_encrypt = fuzzed_data_provider.ConsumeBool();

src/test/fuzz/pow.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ FUZZ_TARGET_INIT(pow, initialize_pow)
4444
current_block.nHeight = current_height;
4545
}
4646
if (fuzzed_data_provider.ConsumeBool()) {
47-
current_block.nTime = fixed_time + current_height * consensus_params.nPowTargetSpacing;
47+
const uint32_t seconds = current_height * consensus_params.nPowTargetSpacing;
48+
if (!AdditionOverflow(fixed_time, seconds)) {
49+
current_block.nTime = fixed_time + seconds;
50+
}
4851
}
4952
if (fuzzed_data_provider.ConsumeBool()) {
5053
current_block.nBits = fixed_bits;

test/sanitizer_suppressions/ubsan

Lines changed: 45 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# -fsanitize=undefined suppressions
2+
# =================================
3+
# No suppressions at the moment. Hooray!
4+
15
# -fsanitize=integer suppressions
26
# ===============================
37
# Unsigned integer overflow occurs when the result of an unsigned integer
@@ -6,7 +10,8 @@
610
# contains files in which we expect unsigned integer overflows to occur. The
711
# list is used to suppress -fsanitize=integer warnings when running our CI UBSan
812
# job.
9-
unsigned-integer-overflow:*/include/c++/*/bits/basic_string.tcc
13+
unsigned-integer-overflow:*/include/c++/
14+
unsigned-integer-overflow:addrman.cpp
1015
unsigned-integer-overflow:arith_uint256.h
1116
unsigned-integer-overflow:basic_string.h
1217
unsigned-integer-overflow:bench/bench.h
@@ -15,39 +20,42 @@ unsigned-integer-overflow:bloom.cpp
1520
unsigned-integer-overflow:chain.cpp
1621
unsigned-integer-overflow:chain.h
1722
unsigned-integer-overflow:coded_stream.h
23+
unsigned-integer-overflow:coins.cpp
24+
unsigned-integer-overflow:compressor.cpp
1825
unsigned-integer-overflow:core_write.cpp
19-
unsigned-integer-overflow:crypto/*
26+
unsigned-integer-overflow:crypto/
27+
# unsigned-integer-overflow in FuzzedDataProvider's ConsumeIntegralInRange
28+
unsigned-integer-overflow:FuzzedDataProvider.h
2029
unsigned-integer-overflow:hash.cpp
21-
unsigned-integer-overflow:leveldb/db/log_reader.cc
22-
unsigned-integer-overflow:leveldb/util/bloom.cc
23-
unsigned-integer-overflow:leveldb/util/crc32c.h
24-
unsigned-integer-overflow:leveldb/util/hash.cc
30+
unsigned-integer-overflow:leveldb/
2531
unsigned-integer-overflow:policy/fees.cpp
2632
unsigned-integer-overflow:prevector.h
33+
unsigned-integer-overflow:pubkey.h
2734
unsigned-integer-overflow:script/interpreter.cpp
2835
unsigned-integer-overflow:stl_bvector.h
2936
unsigned-integer-overflow:txmempool.cpp
3037
unsigned-integer-overflow:util/strencodings.cpp
3138
unsigned-integer-overflow:validation.cpp
3239
unsigned-integer-overflow:xoroshiro128plusplus.h
33-
# std::variant warning fixed in https://github.com/gcc-mirror/gcc/commit/074436cf8cdd2a9ce75cadd36deb8301f00e55b9
34-
implicit-unsigned-integer-truncation:std::__detail::__variant::_Variant_storage
35-
vptr:bls/bls.h
36-
37-
implicit-integer-sign-change:*/include/c++/*/bits/*.h
40+
implicit-integer-sign-change:*/include/boost/
41+
implicit-integer-sign-change:*/include/c++/
3842
implicit-integer-sign-change:*/new_allocator.h
39-
implicit-integer-sign-change:/usr/include/boost/date_time/format_date_parser.hpp
43+
implicit-integer-sign-change:addrman.h
4044
implicit-integer-sign-change:arith_uint256.cpp
4145
implicit-integer-sign-change:bech32.cpp
4246
implicit-integer-sign-change:bloom.cpp
43-
implicit-integer-sign-change:chain.*
47+
implicit-integer-sign-change:chain.cpp
48+
implicit-integer-sign-change:chain.h
4449
implicit-integer-sign-change:coins.h
4550
implicit-integer-sign-change:compat/stdin.cpp
4651
implicit-integer-sign-change:compressor.h
4752
implicit-integer-sign-change:crc32c/
48-
implicit-integer-sign-change:crypto/*
53+
implicit-integer-sign-change:crypto/
54+
# implicit-integer-sign-change in FuzzedDataProvider's ConsumeIntegralInRange
55+
implicit-integer-sign-change:FuzzedDataProvider.h
4956
implicit-integer-sign-change:key.cpp
5057
implicit-integer-sign-change:noui.cpp
58+
implicit-integer-sign-change:policy/fees.cpp
5159
implicit-integer-sign-change:prevector.h
5260
implicit-integer-sign-change:script/bitcoinconsensus.cpp
5361
implicit-integer-sign-change:script/interpreter.cpp
@@ -57,20 +65,39 @@ implicit-integer-sign-change:test/coins_tests.cpp
5765
implicit-integer-sign-change:test/pow_tests.cpp
5866
implicit-integer-sign-change:test/prevector_tests.cpp
5967
implicit-integer-sign-change:test/sighash_tests.cpp
68+
implicit-integer-sign-change:test/skiplist_tests.cpp
6069
implicit-integer-sign-change:test/streams_tests.cpp
6170
implicit-integer-sign-change:test/transaction_tests.cpp
6271
implicit-integer-sign-change:txmempool.cpp
72+
implicit-integer-sign-change:util/strencodings.cpp
73+
implicit-integer-sign-change:util/strencodings.h
74+
implicit-integer-sign-change:validation.cpp
6375
implicit-integer-sign-change:zmq/zmqpublishnotifier.cpp
6476
implicit-signed-integer-truncation,implicit-integer-sign-change:chain.h
6577
implicit-signed-integer-truncation,implicit-integer-sign-change:test/skiplist_tests.cpp
78+
implicit-signed-integer-truncation:addrman.cpp
79+
implicit-signed-integer-truncation:addrman.h
6680
implicit-signed-integer-truncation:chain.h
67-
implicit-signed-integer-truncation:crypto/*
81+
implicit-signed-integer-truncation:crypto/
6882
implicit-signed-integer-truncation:cuckoocache.h
69-
implicit-signed-integer-truncation:leveldb/*
83+
implicit-signed-integer-truncation:leveldb/
84+
implicit-signed-integer-truncation:net.cpp
85+
implicit-signed-integer-truncation:net_processing.cpp
7086
implicit-signed-integer-truncation:streams.h
7187
implicit-signed-integer-truncation:test/arith_uint256_tests.cpp
7288
implicit-signed-integer-truncation:test/skiplist_tests.cpp
7389
implicit-signed-integer-truncation:torcontrol.cpp
74-
implicit-unsigned-integer-truncation:crypto/*
75-
implicit-unsigned-integer-truncation:leveldb/*
90+
implicit-unsigned-integer-truncation:crypto/
91+
implicit-unsigned-integer-truncation:leveldb/
92+
# std::variant warning fixed in https://github.com/gcc-mirror/gcc/commit/074436cf8cdd2a9ce75cadd36deb8301f00e55b9
93+
implicit-unsigned-integer-truncation:std::__detail::__variant::_Variant_storage
7694
shift-base:xoroshiro128plusplus.h
95+
shift-base:*/include/c++/
96+
shift-base:arith_uint256.cpp
97+
shift-base:crypto/
98+
shift-base:hash.cpp
99+
shift-base:leveldb/
100+
shift-base:net_processing.cpp
101+
shift-base:streams.h
102+
shift-base:util/bip32.cpp
103+
vptr:bls/bls.h

0 commit comments

Comments
 (0)