Skip to content

Commit 71dbc2c

Browse files
committed
Add glue to oss-fuzz
Signed-off-by: Arthur Chan <[email protected]>
1 parent c5c2288 commit 71dbc2c

File tree

3 files changed

+87
-1
lines changed

3 files changed

+87
-1
lines changed

oss_fuzz_integration/build_all_custom_images.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ if [[ -z ${CLOUD_BUILD_ENV:+dummy} ]]; then
5353
docker build -t gcr.io/oss-fuzz-base/base-builder infra/base-images/base-builder
5454
docker build -t gcr.io/oss-fuzz-base/base-runner infra/base-images/base-runner
5555
docker build -t gcr.io/oss-fuzz-base/base-builder-python infra/base-images/base-builder-python
56-
docker build -t gcr.io/oss-fuzz-base/base-builder-python infra/base-images/base-builder-jvm
56+
docker build -t gcr.io/oss-fuzz-base/base-builder-jvm infra/base-images/base-builder-jvm
57+
docker build -t gcr.io/oss-fuzz-base/base-builder-rust infra/base-images/base-builder-rust
5758
fi

oss_fuzz_integration/build_post_processing.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,5 @@ cd oss-fuzz
4444
docker build -t gcr.io/oss-fuzz-base/base-builder infra/base-images/base-builder
4545
docker build -t gcr.io/oss-fuzz-base/base-builder-python infra/base-images/base-builder-python
4646
docker build -t gcr.io/oss-fuzz-base/base-builder-jvm infra/base-images/base-builder-jvm
47+
docker build -t gcr.io/oss-fuzz-base/base-builder-rust infra/base-images/base-builder-rust
4748
docker build -t gcr.io/oss-fuzz-base/base-runner infra/base-images/base-runner

oss_fuzz_integration/oss-fuzz-patches.diff

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,87 @@ index 8f6486896..b4f50ac36 100644
3333
RUN /root/checkout_build_install_llvm.sh
3434
RUN rm /root/checkout_build_install_llvm.sh
3535

36+
diff --git a/infra/base-images/base-builder/compile b/infra/base-images/base-builder/compile
37+
index d9077510f..5baa138a6 100755
38+
--- a/infra/base-images/base-builder/compile
39+
+++ b/infra/base-images/base-builder/compile
40+
@@ -20,6 +20,7 @@ echo "---------------------------------------------------------------"
41+
sysctl -w vm.mmap_rnd_bits=28
42+
43+
OSS_FUZZ_ON_DEMAND="${OSS_FUZZ_ON_DEMAND:-0}"
44+
+RUST_SANITIZER=$SANITIZER
45+
46+
if [ "$FUZZING_LANGUAGE" = "jvm" ]; then
47+
if [ "$FUZZING_ENGINE" != "libfuzzer" ] && [ "$FUZZING_ENGINE" != "wycheproof" ]; then
48+
@@ -66,6 +67,13 @@ if [ "$FUZZING_LANGUAGE" = "python" ]; then
49+
fi
50+
fi
51+
52+
+if [ "$FUZZING_LANGUAGE" = "rust" ]; then
53+
+ if [ "$SANITIZER" = "introspector" ]; then
54+
+ # introspector sanitizer flag will cause cargo build failed, remove it temporary and store it in separate variable
55+
+ export SANITIZER=address
56+
+ fi
57+
+fi
58+
+
59+
if [ -z "${SANITIZER_FLAGS-}" ]; then
60+
FLAGS_VAR="SANITIZER_FLAGS_${SANITIZER}"
61+
export SANITIZER_FLAGS=${!FLAGS_VAR-}
62+
@@ -111,7 +119,7 @@ fi
63+
# use RUSTFLAGS.
64+
# FIXME: Support code coverage once support is in.
65+
# See https://github.com/rust-lang/rust/issues/34701.
66+
-if [ "$SANITIZER" != "undefined" ] && [ "$SANITIZER" != "coverage" ] && [ "$SANITIZER" != "none" ] && [ "$ARCHITECTURE" != 'i386' ]; then
67+
+if [ "$SANITIZER" != "undefined" ] && [ "$SANITIZER" != "coverage" ] && [ "$SANITIZER" != "none" ] && [ "$RUST_SANITIZER" != "introspector" ] && [ "$ARCHITECTURE" != 'i386' ]; then
68+
export RUSTFLAGS="--cfg fuzzing -Zsanitizer=${SANITIZER} -Cdebuginfo=1 -Cforce-frame-pointers"
69+
else
70+
export RUSTFLAGS="--cfg fuzzing -Cdebuginfo=1 -Cforce-frame-pointers"
71+
@@ -188,7 +196,7 @@ EOF
72+
export CXXFLAGS="$CXXFLAGS -fno-sanitize=leak"
73+
fi
74+
75+
-if [ "$SANITIZER" = "introspector" ]; then
76+
+if [ "$SANITIZER" = "introspector" ] || [ "$RUST_SANITIZER" = "introspector" ]; then
77+
export AR=llvm-ar
78+
export NM=llvm-nm
79+
export RANLIB=llvm-ranlib
80+
@@ -280,7 +288,7 @@ else
81+
fi
82+
fi
83+
84+
-if [ "$SANITIZER" = "introspector" ]; then
85+
+if [ "$SANITIZER" = "introspector" ] || [ "$RUST_SANITIZER" = "introspector" ]; then
86+
unset CXXFLAGS
87+
unset CFLAGS
88+
export G_ANALYTICS_TAG="G-8WTFM1Y62J"
89+
@@ -295,6 +303,21 @@ if [ "$SANITIZER" = "introspector" ]; then
90+
mkdir -p $SRC/my-fi-data
91+
find $OUT/ -name *.data -exec mv {} $SRC/my-fi-data/ \;
92+
find $OUT/ -name *.data.yaml -exec mv {} $SRC/my-fi-data/ \;
93+
+ elif [ "$FUZZING_LANGUAGE" = "rust" ]; then
94+
+ echo "GOING rust route"
95+
+
96+
+ # Run the rust frontend
97+
+ pushd /fuzz-introspector/frontends/rust/rust_function_analyser
98+
+ cargo run -- $SRC
99+
+
100+
+ # Move files temporarily to fix workflow of other languages.
101+
+ mkdir -p $SRC/my-fi-data
102+
+ find ./ -name "*.data" -exec mv {} $SRC/my-fi-data/ \;
103+
+ find ./ -name "*.data.yaml" -exec mv {} $SRC/my-fi-data/ \;
104+
+ popd
105+
+
106+
+ # Restore the sanitizer flag for rust
107+
+ export SANITIZER="introspector"
108+
fi
109+
110+
mkdir -p $SRC/inspector
111+
@@ -336,7 +359,7 @@ if [ "$SANITIZER" = "introspector" ]; then
112+
python3 /fuzz-introspector/src/main.py report $REPORT_ARGS
113+
cp -rf $SRC/inspector $OUT/inspector
114+
else
115+
- # C/C++
116+
+ # C/C++/Rust
117+
118+
# Correlate fuzzer binaries to fuzz-introspector's raw data
119+
python3 /fuzz-introspector/src/main.py correlate --binaries_dir=$OUT/

0 commit comments

Comments
 (0)