]> Cypherpunks.ru repositories - gostls13.git/commit
[dev.fuzz] internal/fuzz: use coverage instrumentation while fuzzing
authorKatie Hockman <katie@golang.org>
Tue, 20 Apr 2021 20:11:13 +0000 (16:11 -0400)
committerKatie Hockman <katie@golang.org>
Tue, 11 May 2021 21:19:22 +0000 (21:19 +0000)
commit6ffb027483a86d6081989a63bb2af6a69028b46a
tree7ebc29427d8ccabe695924629a2f1583ce98b1a1
parent510e711dd36999f1800678909bb7fdb448aa074f
[dev.fuzz] internal/fuzz: use coverage instrumentation while fuzzing

This change updates the go command behavior when
fuzzing to instrument the binary for code coverage,
and uses this coverage in the fuzzing engine to
determine if an input is interesting.

Unfortunately, we can't store and use the coverage
data for a given run of `go test` and re-use it
the next time we fuzz, since the edges could have
changed between builds. Instead, every entry in
the seed corpus and the on-disk corpus is run
by the workers before fuzzing begins, so that the
coordinator can get the baseline coverage for what
the fuzzing engine has already found (or what
the developers have already provided).

Users should run `go clean -fuzzcache` before
using this change, to clear out any existing
"interesting" values that were in the cache.
Previously, every single non-crashing input was
written to the on-disk corpus. Now, only inputs
that actually expand coverage are written.

This change includes a small hack in
cmd/go/internal/load/pkg.go which ensures that the Gcflags
that were explicitly set in cmd/go/internal/test/test.go
don't get cleared out.

Tests will be added in a follow-up change, since
they will be a bit more involved.

Change-Id: Ie659222d44475c6d68fa4a35d37c37cab3619d71
Reviewed-on: https://go-review.googlesource.com/c/go/+/312009
Trust: Katie Hockman <katie@golang.org>
Run-TryBot: Katie Hockman <katie@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/internal/load/pkg.go
src/cmd/go/internal/test/test.go
src/cmd/go/internal/work/init.go
src/cmd/go/testdata/script/test_fuzz_fuzztime.txt
src/cmd/go/testdata/script/test_fuzz_mutator.txt
src/internal/fuzz/coverage.go
src/internal/fuzz/fuzz.go
src/internal/fuzz/mutator.go
src/internal/fuzz/worker.go