From ad269ee14767c9ed26ec08197d0c9d2992d5c045 Mon Sep 17 00:00:00 2001 From: Everest Stefan Munro-Zeisberger Date: Mon, 19 Apr 2021 12:00:46 -0700 Subject: [PATCH] Set up Prysm for fuzz testing on Fuzzbuzz (#8789) * Wrap beacon fuzz tests in go-fuzz compatible test functions * Add fuzzbuzz.yaml --- fuzz/block_fuzz.go | 6 ++++++ fuzz/rpc_status_fuzz.go | 6 ++++++ fuzz/ssz_encoder_attestations_fuzz.go | 7 +++++++ fuzz/state_fuzz.go | 6 ++++++ fuzzbuzz.yaml | 6 ++++++ 5 files changed, 31 insertions(+) create mode 100644 fuzzbuzz.yaml diff --git a/fuzz/block_fuzz.go b/fuzz/block_fuzz.go index 1143a4ae3cb6..ddfddc6aab52 100644 --- a/fuzz/block_fuzz.go +++ b/fuzz/block_fuzz.go @@ -99,6 +99,12 @@ func (fakeChecker) Resync() error { return nil } +// FuzzBlock wraps BeaconFuzzBlock in a go-fuzz compatible interface +func FuzzBlock(b []byte) int { + BeaconFuzzBlock(b) + return 0 +} + // BeaconFuzzBlock runs full processing of beacon block against a given state. func BeaconFuzzBlock(b []byte) { params.UseMainnetConfig() diff --git a/fuzz/rpc_status_fuzz.go b/fuzz/rpc_status_fuzz.go index 2aabd56425a4..7b03c5e4ba67 100644 --- a/fuzz/rpc_status_fuzz.go +++ b/fuzz/rpc_status_fuzz.go @@ -62,6 +62,12 @@ func init() { }) } +// FuzzP2PRPCStatus wraps BeaconFuzzP2PRPCStatus in a go-fuzz compatible interface +func FuzzP2PRPCStatus(b []byte) int { + BeaconFuzzP2PRPCStatus(b) + return 0 +} + // BeaconFuzzP2PRPCStatus implements libfuzzer and beacon fuzz interface. func BeaconFuzzP2PRPCStatus(b []byte) { s, err := h.NewStream(context.Background(), p.PeerID(), "/eth2/beacon_chain/req/status/1/ssz_snappy") diff --git a/fuzz/ssz_encoder_attestations_fuzz.go b/fuzz/ssz_encoder_attestations_fuzz.go index 8be1b285967b..1883873a8c5d 100644 --- a/fuzz/ssz_encoder_attestations_fuzz.go +++ b/fuzz/ssz_encoder_attestations_fuzz.go @@ -10,6 +10,13 @@ import ( var buf = new(bytes.Buffer) +// FuzzSszEncoderAttestation wraps SszEncoderAttestationFuzz in a +// go-fuzz compatible interface +func FuzzSszEncoderAttestation(b []byte) int { + SszEncoderAttestationFuzz(b) + return 0 +} + // SszEncoderAttestationFuzz runs network encode/decode for attestations. func SszEncoderAttestationFuzz(b []byte) { params.UseMainnetConfig() diff --git a/fuzz/state_fuzz.go b/fuzz/state_fuzz.go index 4cb76fe9d0ef..2949e9f7d597 100644 --- a/fuzz/state_fuzz.go +++ b/fuzz/state_fuzz.go @@ -17,6 +17,12 @@ func init() { }) } +// FuzzState wraps BeaconStateFuzz in a go-fuzz compatible interface +func FuzzState(b []byte) int { + BeaconStateFuzz(b) + return 0 +} + // BeaconStateFuzz -- func BeaconStateFuzz(input []byte) { params.UseMainnetConfig() diff --git a/fuzzbuzz.yaml b/fuzzbuzz.yaml new file mode 100644 index 000000000000..85778da5092e --- /dev/null +++ b/fuzzbuzz.yaml @@ -0,0 +1,6 @@ +base: + language: go + docker_image: golang:latest + build_tags: + - libfuzzer + - blst_disabled