From c562afe930318b1d01e57f47161014421b18fd04 Mon Sep 17 00:00:00 2001 From: Will Date: Sun, 3 May 2020 11:45:09 -0700 Subject: [PATCH] [IPFS] Initial fuzzing of datastore consistency (#3739) * [IPFS] Initial fuzzing of datastore consistency Submitting IPFS for initial integration. Initial fuzz testing is validating the interface of the multiple datastore backings of IPFS. A fuzzer for the protocol between nodes will follow. * split backends into separate binaries for libfuzzer address sanitizer --- projects/ipfs/Dockerfile | 22 ++++++++++++++++++ projects/ipfs/build.sh | 46 ++++++++++++++++++++++++++++++++++++++ projects/ipfs/project.yaml | 9 ++++++++ 3 files changed, 77 insertions(+) create mode 100644 projects/ipfs/Dockerfile create mode 100755 projects/ipfs/build.sh create mode 100644 projects/ipfs/project.yaml diff --git a/projects/ipfs/Dockerfile b/projects/ipfs/Dockerfile new file mode 100644 index 000000000..ebc600fc9 --- /dev/null +++ b/projects/ipfs/Dockerfile @@ -0,0 +1,22 @@ +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +FROM gcr.io/oss-fuzz-base/base-builder +MAINTAINER willscott@protocol.io +RUN go get -t github.com/ipfs/go-datastore + +COPY build.sh $SRC/ +WORKDIR $SRC/ diff --git a/projects/ipfs/build.sh b/projects/ipfs/build.sh new file mode 100755 index 000000000..65c2d25c0 --- /dev/null +++ b/projects/ipfs/build.sh @@ -0,0 +1,46 @@ +#!/bin/bash -eu +# Copyright 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +cd $GOPATH/src/github.com/ipfs/go-datastore/fuzz + +function compile_ds_fuzzer { + fuzzer=$1 + + if [ $# == 2 ]; then + rm provider* || true + DS_PROVIDERS="$2" go generate + fi + + # vendor dependencies since go-fuzz doesn't play nicely with go mod. + rm -rf vendor .gopath || true + go mod vendor + mkdir .gopath + cd .gopath + ln -s ../vendor src + cd .. + + # Compile and instrument all Go files relevant to this fuzz target. + GO111MODULE=off GOPATH=$PWD/.gopath go-fuzz -o $fuzzer.a . + + # Link Go code ($fuzzer.a) with fuzzing engine to produce fuzz target binary. + $CXX $CXXFLAGS $LIB_FUZZING_ENGINE $fuzzer.a -o $OUT/$fuzzer +} + +compile_ds_fuzzer ipfs_ds_flatfs +compile_ds_fuzzer ipfs_ds_badger "github.com/ipfs/go-ds-badger" +compile_ds_fuzzer ipfs_ds_badger2 "github.com/ipfs/go-ds-badger2" + diff --git a/projects/ipfs/project.yaml b/projects/ipfs/project.yaml new file mode 100644 index 000000000..68ced8b21 --- /dev/null +++ b/projects/ipfs/project.yaml @@ -0,0 +1,9 @@ +homepage: "https://github.com/ipfs/go-datastore" +primary_contact: "willscott@protocol.ai" +auto_ccs : +- "stebalien@protocol.ai" +language: go +fuzzing_engines: +- libfuzzer +sanitizers: +- address