summaryrefslogtreecommitdiff
path: root/fuzz/report
blob: bebb0ca55299b8dc86f98b243274da9023572cba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash -e
# Copyright (c) 2019 Yubico AB. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
#
# XXX This should really be a Makefile.

T=""
#T+=" harnesses/assert"
#T+=" harnesses/assert-rsa-h-p"
#T+=" harnesses/assert-u2f"
#T+=" harnesses/cred"
#T+=" harnesses/cred-rsa-h-p"
#T+=" harnesses/cred-u2f"
#T+=" harnesses/cred-u2f-exclude"
#T+=" harnesses/fido2-assert-G"
#T+=" harnesses/fido2-assert-V"
#T+=" harnesses/fido2-cred-M"
#T+=" harnesses/fido2-cred-V"
T+=" harnesses/fuzz_assert"
T+=" harnesses/fuzz_bio"
T+=" harnesses/fuzz_cred"
T+=" harnesses/fuzz_credman"
T+=" harnesses/fuzz_mgmt"

clean() {
	echo cleaning
	rm -rf obj
	mkdir obj
}

build() {
	echo building
	mkdir obj/build
	(cd obj/build && cmake -DFUZZ=1 -DLIBFUZZER=1 -DCMAKE_C_COMPILER=clang \
		-DCOVERAGE=1 -DCMAKE_BUILD_TYPE=Debug ../../..) 2>/dev/null 1>&2
	make -C obj/build 2>/dev/null 1>&2
	cc -fPIC -D_GNU_SOURCE -shared -o obj/preload-fuzz.so preload-fuzz.c
}

sync() {
	if [ -n "${REMOTE}" ]; then
		for t in ${T}; do
			echo syncing ${t}
			(cd obj && REMOTE="${REMOTE}" ../${t} sync)
		done
	else
		tar -C obj -zxf corpus.tgz
	fi
}

run() {
	export LLVM_PROFILE_FILE="profraw/%h-%p.profraw"
	export PRELOAD=$(realpath obj/preload-fuzz.so)

	for t in ${T}; do
		echo running ${t}
		(cd obj && ../${t} run)
	done
}

merge() {
	echo merging
	(cd obj && \
		llvm-profdata merge -sparse profraw/*.profraw \
			-o libfido2.profdata &&
		llvm-cov show -format=html -tab-size=8 build/src/libfido2.so \
			-instr-profile=libfido2.profdata > report.html &&
		llvm-cov report -use-color=false build/src/libfido2.so \
			-instr-profile=libfido2.profdata > summary.txt &&
		llvm-cov report -use-color=false -show-functions \
			-instr-profile=libfido2.profdata build/src/libfido2.so \
			../../src/*.[ch] > functions.txt)
}

clean
build
sync
run
merge