mirror of https://github.com/google/oss-fuzz.git
59 lines
2.5 KiB
Markdown
59 lines
2.5 KiB
Markdown
# Fuzzer environment on ClusterFuzz
|
|
|
|
Your fuzz targets will be run on a [Google Compute Engine](https://cloud.google.com/compute/) VM (Linux) with some security restrictions.
|
|
|
|
## Runtime Dependencies
|
|
|
|
You should not make any assumptions on the availability of dependent packages
|
|
in the execution environment. Packages that are installed via
|
|
[Dockerfile](https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md#dockerfile)
|
|
or built as part of
|
|
[build.sh](https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md#buildsh)
|
|
are not available on the bot runtime environment (where the fuzz targets run).
|
|
|
|
If you need these dependencies in the runtime environment, you can either
|
|
- Install the packages via Dockerfile
|
|
([example](https://github.com/google/oss-fuzz/blob/master/projects/tor/Dockerfile#L19))
|
|
and then link statically against them
|
|
([example](https://github.com/google/oss-fuzz/blob/master/projects/tor/build.sh#L40))
|
|
- Or build the dependencies statically in
|
|
[build.sh](https://github.com/google/oss-fuzz/blob/master/docs/new_project_guide.md#buildsh)
|
|
([example](https://github.com/google/oss-fuzz/blob/master/projects/ffmpeg/build.sh#L26)).
|
|
|
|
All build artifacts needed during fuzz target execution should be inside the `$OUT`
|
|
directory. Only those artifacts are archived and used on the bots. Everything else
|
|
is ignored (e.g. artifacts in `$WORK`, `$SRC`, etc) and hence is not available
|
|
in the execution environment.
|
|
|
|
You should ensure that the fuzz target works correctly by using `run_fuzzer` command
|
|
(see instructions [here](new_project_guide.md#testing-locally)). This command uses
|
|
a clean base-runner docker container and not the base-builder docker container
|
|
created during build-time.
|
|
|
|
## argv[0]
|
|
|
|
You must not modify argv[0]. It is required for certain things to work correctly.
|
|
|
|
## Current working directory
|
|
|
|
You should not make any assumptions about the current working directory of your
|
|
fuzz target. If you need to load data files, please use `argv[0]` to get the
|
|
directory where your fuzz target executable is located.
|
|
|
|
## File system
|
|
|
|
Everything except `/tmp` is read-only, including the directory that your fuzz target
|
|
executable lives in.
|
|
|
|
`/dev` is also unavailable.
|
|
|
|
## Hardware
|
|
|
|
Your project should not be compiled with `-march=native` or `-mtune=native`
|
|
flags, as the build infrastructure and fuzzing machines may have different CPUs
|
|
as well as other hardware differences. You may however use `-mtune=generic`.
|
|
|
|
## Network access
|
|
|
|
There will be no network interfaces available (not even loopback).
|