Skip to content

add fuzzit.dev continous fuzzing integration #19927

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

yevgenypats
Copy link

@yevgenypats yevgenypats commented Aug 7, 2019

Hi Team,

The PR is ready for review: more instruction in a later comment

This PR adds a continuous fuzzing integration to go-ethereum's travis pipeline via https://fuzzit.dev service.

This continuous fuzzing workflow consist of

Continuously fuzzing up-to-date master generating new test cases, crashes and corpus.

Running quick regression tests with the generated corpus and fixed crashes on every PR to catch bugs earlier

I'm the founder of fuzzit.dev and the service is free for open source projects (you can see some great projects that we serve on our website).

To make integration as easy as possible, we've created an organisation at https://app.fuzzit.dev/orgs/ethereum/dashboard.

To take ownership of the organisation, please login to https://app.fuzzit.dev and let us know your account.

build/fuzzit.sh script is an additional step in Travis pipeline which builds fuzzit targets and uploads them to fuzzit.dev servers for continuous fuzzing.

This PR uses a temporary API key. After merging, please get the API key from https://app.fuzzit.dev/orgs/ethereum/settings and set FUZZIT_API_KEY env variable via Travis UI (https://travis-ci.org/ethereum/go-ethereum/settings).

Let me know if you have any questions.

@kjk kjk force-pushed the fuzzit-integration branch from ad2cbde to 702ccfe Compare August 7, 2019 20:06
@karalabe
Copy link
Member

karalabe commented Aug 8, 2019

What's the difference between Fuzzit and Fuzzbuzz?

@yevgenypats
Copy link
Author

yevgenypats commented Aug 8, 2019 via email

@yevgenypats
Copy link
Author

yevgenypats commented Aug 8, 2019 via email

@holiman
Copy link
Contributor

holiman commented Aug 8, 2019

Interesting. I guess you've seen this PR: #19910 . To do the same fuzzing on fuzzit.dev, would we define the individual fuzzers within that sh-script somehow?

@yevgenypats
Copy link
Author

yevgenypats commented Aug 8, 2019 via email

@holiman
Copy link
Contributor

holiman commented Aug 8, 2019

It's building now
Screenshot_2019-08-08 Build #19658 - ethereum go-ethereum - Travis CI

@yevgenypats
Copy link
Author

cool. I'm on it. probably some travis glitch

@yevgenypats yevgenypats force-pushed the fuzzit-integration branch 2 times, most recently from 99c1057 to 007417e Compare August 8, 2019 21:10
@yevgenypats
Copy link
Author

Hi Team,

The PR is ready for review.

I don't have access to the wiki so I can't add the instructions of how to compile and run the fuzzers, so I'll put them here in the meantime.

Building the fuzzers

Currently there are 4 go-fuzz fuzzers. I've added a script that compiles all the targets with libFuzzer (so this currently only supported on Linux) ./build/libfuzzer_targets

Continuous Fuzzing Integration with Fuzzit

  1. Every push of new code to master build new fuzz targets and updates them on fuzzit servers. The fuzzers run continuously and alert the relevant people of any new crashes. (someone will need to login so I can add him/her to the Eth team and configure the email alerts).
  2. The first process generates a corpus which we use during regression. For every pull-request all test-cases and crashes (that were fixed) are downloaded with fuzzit CLI and run against the built fuzzer targets of the PR to catch bugs early on. This will catch both new bugs that the PR might introduce or old bugs that were fixed already.

Local Development

Developers can also run the regression locally via fuzzit CLI to try and debug issues that arise in their PR.

# Current Fuzz Target TARGETS=("bitutil-fuzzer" "bn256-add-fuzzer" "bn256-mul-fuzzer" "bn256-pair-fuzzer")
./fuzzit create job --local ethereum/$TARGET $PATH_TO_FUZZER

Attached is a screenshot of the main page of the dashboard.

Please review.

Cheers,
Yevgeny

image

@yevgenypats
Copy link
Author

ping @holiman @karalabe .

@adamschmideg
Copy link
Contributor

adamschmideg commented Nov 19, 2019

Fuzzbuzz integration looks simpler. So we'll come back to this one after #19910 is sorted out.

@karalabe
Copy link
Member

In the mean time go-ethereum was integrated into Google's OSS Fuzz project, so that should cover all continuous fuzzing needs for free.

@karalabe karalabe closed this Nov 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants