diff options
author | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2021-01-29 16:20:19 +0100 |
---|---|---|
committer | Fabian Meumertzheim <meumertzheim@code-intelligence.com> | 2021-02-09 17:20:51 +0100 |
commit | 5246e52be3bf4427791000355cbef86626b43eca (patch) | |
tree | e0683ad15664f2c3deecf3a6ce8c56f2a9597d85 /bazel | |
download | jazzer-api-5246e52be3bf4427791000355cbef86626b43eca.tar.gz |
Initial commit
Diffstat (limited to 'bazel')
-rw-r--r-- | bazel/BUILD.bazel | 5 | ||||
-rw-r--r-- | bazel/fuzz_target.bzl | 65 | ||||
-rwxr-xr-x | bazel/fuzz_target_test_wrapper.sh | 28 | ||||
-rwxr-xr-x | bazel/jazzer | 9 | ||||
-rwxr-xr-x | bazel/jazzer_wrapper.sh | 18 |
5 files changed, 125 insertions, 0 deletions
diff --git a/bazel/BUILD.bazel b/bazel/BUILD.bazel new file mode 100644 index 00000000..9df500d6 --- /dev/null +++ b/bazel/BUILD.bazel @@ -0,0 +1,5 @@ +exports_files([ + "fuzz_target_test_wrapper.sh", + "jazzer", + "jazzer_wrapper.sh", +]) diff --git a/bazel/fuzz_target.bzl b/bazel/fuzz_target.bzl new file mode 100644 index 00000000..f7b60c19 --- /dev/null +++ b/bazel/fuzz_target.bzl @@ -0,0 +1,65 @@ +# Copyright 2021 Code Intelligence GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +def java_fuzz_target_test( + name, + target_class, + hook_classes = [], + native_libs = [], + use_asan = False, + visibility = None, + tags = [], + fuzzer_args = [], + **kwargs): + target_name = name + "_target" + native.java_binary( + name = target_name, + visibility = ["//visibility:private"], + create_executable = False, + **kwargs + ) + + additional_args = [] + + hooks = ":".join(hook_classes) + if hooks != "": + additional_args.append("--custom_hooks=" + hooks) + + native_libs_paths = ":".join(["$$(dirname $(rootpaths %s) | paste -sd ':' -)" % native_lib for native_lib in native_libs]) + if native_libs_paths != "": + additional_args.append("--jvm_args=-Djava.library.path=" + native_libs_paths) + + driver = "//driver:jazzer_driver_asan" if use_asan else "//driver:jazzer_driver" + + native.sh_test( + name = name, + srcs = ["//bazel:fuzz_target_test_wrapper.sh"], + size = "large", + timeout = "moderate", + args = [ + "$(rootpath %s)" % driver, + "--cp=$(rootpath :%s_deploy.jar)" % target_name, + "--target_class=" + target_class, + "--agent_path=$(rootpath //agent:jazzer_agent_deploy.jar)", + # Should be bigger than the JVM max heap size (4096m) + "-rss_limit_mb=5000", + ] + additional_args + fuzzer_args, + data = [ + ":%s_deploy.jar" % target_name, + "//agent:jazzer_agent_deploy.jar", + driver, + ] + native_libs, + tags = tags, + visibility = visibility, + ) diff --git a/bazel/fuzz_target_test_wrapper.sh b/bazel/fuzz_target_test_wrapper.sh new file mode 100755 index 00000000..e8025653 --- /dev/null +++ b/bazel/fuzz_target_test_wrapper.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Copyright 2021 Code Intelligence GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Crashes will be available as test outputs. These are cleared on the next run, +# so this is only useful for examples. +DEFAULT_CRASH_PREFIX="$TEST_UNDECLARED_OUTPUTS_DIR" +eval "$1" -artifact_prefix="$DEFAULT_CRASH_PREFIX/" --reproducer_path="$DEFAULT_CRASH_PREFIX" "${@:2}" -seed=2735196724 +# Assert that we either found a crash in java (exit code 77) or an ASan crash +# (exit code 76). +declare -i exit_code=$? +if [ $exit_code -eq 77 ] || [ $exit_code -eq 76 ] +then + exit 0 +else + exit 1 +fi diff --git a/bazel/jazzer b/bazel/jazzer new file mode 100755 index 00000000..bc706e24 --- /dev/null +++ b/bazel/jazzer @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +JAVA_BIN=$(readlink -f "$(command -v java)") +HEURISTIC_JAVA_BASE_PATH=${JAVA_BIN%/bin/java} +JAVA_BASE_PATH=${JAVA_HOME:-$HEURISTIC_JAVA_BASE_PATH} +JVM_LD_LIBRARY_PATH="$JAVA_BASE_PATH/lib/server:$JAVA_BASE_PATH/lib/amd64/server" +MODIFIED_LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$JVM_LD_LIBRARY_PATH" + +LD_LIBRARY_PATH="$MODIFIED_LD_LIBRARY_PATH" ./jazzer_driver "$@" + diff --git a/bazel/jazzer_wrapper.sh b/bazel/jazzer_wrapper.sh new file mode 100755 index 00000000..c401f12e --- /dev/null +++ b/bazel/jazzer_wrapper.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +# Copyright 2021 Code Intelligence GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +DEFAULT_CRASH_PREFIX="/tmp/jazzer" +mkdir $DEFAULT_CRASH_PREFIX +eval "$1" -artifact_prefix="$DEFAULT_CRASH_PREFIX/" --reproducer_path="$DEFAULT_CRASH_PREFIX" "${@:2}" |