diff options
Diffstat (limited to 'fuzz/report')
-rwxr-xr-x | fuzz/report | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/fuzz/report b/fuzz/report new file mode 100755 index 0000000..bebb0ca --- /dev/null +++ b/fuzz/report | |||
@@ -0,0 +1,80 @@ | |||
1 | #!/bin/bash -e | ||
2 | # Copyright (c) 2019 Yubico AB. All rights reserved. | ||
3 | # Use of this source code is governed by a BSD-style | ||
4 | # license that can be found in the LICENSE file. | ||
5 | # | ||
6 | # XXX This should really be a Makefile. | ||
7 | |||
8 | T="" | ||
9 | #T+=" harnesses/assert" | ||
10 | #T+=" harnesses/assert-rsa-h-p" | ||
11 | #T+=" harnesses/assert-u2f" | ||
12 | #T+=" harnesses/cred" | ||
13 | #T+=" harnesses/cred-rsa-h-p" | ||
14 | #T+=" harnesses/cred-u2f" | ||
15 | #T+=" harnesses/cred-u2f-exclude" | ||
16 | #T+=" harnesses/fido2-assert-G" | ||
17 | #T+=" harnesses/fido2-assert-V" | ||
18 | #T+=" harnesses/fido2-cred-M" | ||
19 | #T+=" harnesses/fido2-cred-V" | ||
20 | T+=" harnesses/fuzz_assert" | ||
21 | T+=" harnesses/fuzz_bio" | ||
22 | T+=" harnesses/fuzz_cred" | ||
23 | T+=" harnesses/fuzz_credman" | ||
24 | T+=" harnesses/fuzz_mgmt" | ||
25 | |||
26 | clean() { | ||
27 | echo cleaning | ||
28 | rm -rf obj | ||
29 | mkdir obj | ||
30 | } | ||
31 | |||
32 | build() { | ||
33 | echo building | ||
34 | mkdir obj/build | ||
35 | (cd obj/build && cmake -DFUZZ=1 -DLIBFUZZER=1 -DCMAKE_C_COMPILER=clang \ | ||
36 | -DCOVERAGE=1 -DCMAKE_BUILD_TYPE=Debug ../../..) 2>/dev/null 1>&2 | ||
37 | make -C obj/build 2>/dev/null 1>&2 | ||
38 | cc -fPIC -D_GNU_SOURCE -shared -o obj/preload-fuzz.so preload-fuzz.c | ||
39 | } | ||
40 | |||
41 | sync() { | ||
42 | if [ -n "${REMOTE}" ]; then | ||
43 | for t in ${T}; do | ||
44 | echo syncing ${t} | ||
45 | (cd obj && REMOTE="${REMOTE}" ../${t} sync) | ||
46 | done | ||
47 | else | ||
48 | tar -C obj -zxf corpus.tgz | ||
49 | fi | ||
50 | } | ||
51 | |||
52 | run() { | ||
53 | export LLVM_PROFILE_FILE="profraw/%h-%p.profraw" | ||
54 | export PRELOAD=$(realpath obj/preload-fuzz.so) | ||
55 | |||
56 | for t in ${T}; do | ||
57 | echo running ${t} | ||
58 | (cd obj && ../${t} run) | ||
59 | done | ||
60 | } | ||
61 | |||
62 | merge() { | ||
63 | echo merging | ||
64 | (cd obj && \ | ||
65 | llvm-profdata merge -sparse profraw/*.profraw \ | ||
66 | -o libfido2.profdata && | ||
67 | llvm-cov show -format=html -tab-size=8 build/src/libfido2.so \ | ||
68 | -instr-profile=libfido2.profdata > report.html && | ||
69 | llvm-cov report -use-color=false build/src/libfido2.so \ | ||
70 | -instr-profile=libfido2.profdata > summary.txt && | ||
71 | llvm-cov report -use-color=false -show-functions \ | ||
72 | -instr-profile=libfido2.profdata build/src/libfido2.so \ | ||
73 | ../../src/*.[ch] > functions.txt) | ||
74 | } | ||
75 | |||
76 | clean | ||
77 | build | ||
78 | sync | ||
79 | run | ||
80 | merge | ||