Skip to content

Commit faff399

Browse files
author
MarcoFalke
committed
ci: Fuzz with integer sanitizer
1 parent 32d44d2 commit faff399

File tree

5 files changed

+19
-10
lines changed

5 files changed

+19
-10
lines changed

.cirrus.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ task:
136136
FILE_ENV: "./ci/test/00_setup_env_native_asan.sh"
137137

138138
task:
139-
name: '[no depends, sanitizers: fuzzer,address,undefined] [focal]'
139+
name: '[no depends, sanitizers: fuzzer,address,undefined,integer] [focal]'
140140
<< : *GLOBAL_TASK_TEMPLATE
141141
container:
142142
image: ubuntu:focal

Makefile.am

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ OSX_INSTALLER_ICONS=$(top_srcdir)/src/qt/res/icons/bitcoin.icns
4646
OSX_PLIST=$(top_builddir)/share/qt/Info.plist #not installed
4747

4848
DIST_CONTRIB = \
49+
$(top_srcdir)/test/sanitizer_suppressions/lsan \
50+
$(top_srcdir)/test/sanitizer_suppressions/tsan \
51+
$(top_srcdir)/test/sanitizer_suppressions/ubsan \
4952
$(top_srcdir)/contrib/linearize/linearize-data.py \
5053
$(top_srcdir)/contrib/linearize/linearize-hashes.py
5154

ci/test/00_setup_env_native_fuzz.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ export RUN_UNIT_TESTS=false
1414
export RUN_FUNCTIONAL_TESTS=false
1515
export RUN_FUZZ_TESTS=true
1616
export GOAL="install"
17-
export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer,address,undefined CC=clang CXX=clang++ --with-boost-process"
17+
export BITCOIN_CONFIG="--enable-fuzz --with-sanitizers=fuzzer,address,undefined,integer CC=clang CXX=clang++ --with-boost-process"
1818
export CCACHE_SIZE=200M

test/fuzz/test_runner.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
import sys
1515

1616

17-
def get_fuzz_env(*, target):
17+
def get_fuzz_env(*, target, source_dir):
1818
return {
1919
'FUZZ': target,
20+
'UBSAN_OPTIONS':
21+
f'suppressions={source_dir}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1',
2022
'ASAN_OPTIONS': # symbolizer disabled due to https://github.com/google/sanitizers/issues/1364#issuecomment-761072085
2123
'symbolize=0:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1',
2224
}
@@ -137,7 +139,7 @@ def main():
137139
os.path.join(config["environment"]["BUILDDIR"], 'src', 'test', 'fuzz', 'fuzz'),
138140
'-help=1',
139141
],
140-
env=get_fuzz_env(target=test_list_selection[0]),
142+
env=get_fuzz_env(target=test_list_selection[0], source_dir=config['environment']['SRCDIR']),
141143
timeout=20,
142144
check=True,
143145
stderr=subprocess.PIPE,
@@ -154,6 +156,7 @@ def main():
154156
if args.generate:
155157
return generate_corpus_seeds(
156158
fuzz_pool=fuzz_pool,
159+
src_dir=config['environment']['SRCDIR'],
157160
build_dir=config["environment"]["BUILDDIR"],
158161
seed_dir=args.seed_dir,
159162
targets=test_list_selection,
@@ -164,6 +167,7 @@ def main():
164167
fuzz_pool=fuzz_pool,
165168
corpus=args.seed_dir,
166169
test_list=test_list_selection,
170+
src_dir=config['environment']['SRCDIR'],
167171
build_dir=config["environment"]["BUILDDIR"],
168172
merge_dir=args.m_dir,
169173
)
@@ -173,12 +177,13 @@ def main():
173177
fuzz_pool=fuzz_pool,
174178
corpus=args.seed_dir,
175179
test_list=test_list_selection,
180+
src_dir=config['environment']['SRCDIR'],
176181
build_dir=config["environment"]["BUILDDIR"],
177182
use_valgrind=args.valgrind,
178183
)
179184

180185

181-
def generate_corpus_seeds(*, fuzz_pool, build_dir, seed_dir, targets):
186+
def generate_corpus_seeds(*, fuzz_pool, src_dir, build_dir, seed_dir, targets):
182187
"""Generates new corpus seeds.
183188
184189
Run {targets} without input, and outputs the generated corpus seeds to
@@ -192,7 +197,7 @@ def job(command, t):
192197
' '.join(command),
193198
subprocess.run(
194199
command,
195-
env=get_fuzz_env(target=t),
200+
env=get_fuzz_env(target=t, source_dir=src_dir),
196201
check=True,
197202
stderr=subprocess.PIPE,
198203
universal_newlines=True,
@@ -213,7 +218,7 @@ def job(command, t):
213218
future.result()
214219

215220

216-
def merge_inputs(*, fuzz_pool, corpus, test_list, build_dir, merge_dir):
221+
def merge_inputs(*, fuzz_pool, corpus, test_list, src_dir, build_dir, merge_dir):
217222
logging.info("Merge the inputs from the passed dir into the seed_dir. Passed dir {}".format(merge_dir))
218223
jobs = []
219224
for t in test_list:
@@ -231,7 +236,7 @@ def job(t, args):
231236
output = 'Run {} with args {}\n'.format(t, " ".join(args))
232237
output += subprocess.run(
233238
args,
234-
env=get_fuzz_env(target=t),
239+
env=get_fuzz_env(target=t, source_dir=src_dir),
235240
check=True,
236241
stderr=subprocess.PIPE,
237242
universal_newlines=True,
@@ -244,7 +249,7 @@ def job(t, args):
244249
future.result()
245250

246251

247-
def run_once(*, fuzz_pool, corpus, test_list, build_dir, use_valgrind):
252+
def run_once(*, fuzz_pool, corpus, test_list, src_dir, build_dir, use_valgrind):
248253
jobs = []
249254
for t in test_list:
250255
corpus_path = os.path.join(corpus, t)
@@ -261,7 +266,7 @@ def job(t, args):
261266
output = 'Run {} with args {}'.format(t, args)
262267
result = subprocess.run(
263268
args,
264-
env=get_fuzz_env(target=t),
269+
env=get_fuzz_env(target=t, source_dir=src_dir),
265270
stderr=subprocess.PIPE,
266271
universal_newlines=True,
267272
)

test/sanitizer_suppressions/ubsan

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ implicit-signed-integer-truncation:streams.h
8787
implicit-signed-integer-truncation:test/arith_uint256_tests.cpp
8888
implicit-signed-integer-truncation:test/skiplist_tests.cpp
8989
implicit-signed-integer-truncation:torcontrol.cpp
90+
implicit-unsigned-integer-truncation:*/include/c++/
9091
implicit-unsigned-integer-truncation:crypto/
9192
implicit-unsigned-integer-truncation:leveldb/
9293
# std::variant warning fixed in https://github.com/gcc-mirror/gcc/commit/074436cf8cdd2a9ce75cadd36deb8301f00e55b9

0 commit comments

Comments
 (0)