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
|