Skip to content

Latest commit

 

History

History
45 lines (34 loc) · 1.65 KB

CONTRIBUTING.md

File metadata and controls

45 lines (34 loc) · 1.65 KB

How do I contribute?

All targets are broken down by language, fuzzer, and target. The general structure is:

- <language>
  - <fuzzer>
    - <target>
      - testsuite
      - src
      - Dockerfile
      - Mayhemfile
      - README.md

All targets should be able to be built and pushed using the following commands:

Note: You should first navigate to the corresponding target directory before executing the below commands.

docker build -t $MAYHEM_DOCKER_REGISTRY/forallsecure/<target_name> .
docker push $MAYHEM_DOCKER_REGISTRY/forallsecure/<target_name>

The docker ENTRYPOINT for all target examples should be empty [], unless local testing is desired. For example, the c-afl-gcc target sets the ENTRYPOINT to use the afl-fuzz utility to fuzz the containerized binary when the c-afl-gcc Docker image is run. The CMD for every dockerfile should be the command that is expected to be passed to the fuzzer.

All examples should expose a defect in the underlying language. We have been using either a divide-by-zero or SIGABRT bug in most cases but if this is not possible (for example the compiler optimizes the 1/0 bug away), then let us know and we can help! In terms of code structure, all examples look as follows (pseudocode):

if input[0] == "b"
  if input[1] == "u"
    if input[2] == "g"
      x = 1 / 0;

OR

if input[0] == "b"
  if input[1] == "u"
    if input[2] == "g"
      abort();

You can also use the included Makefile at the root of the mayhem-examples repository to automatically build and push all images using the make build and make push commands, respectively.