# Makefile for fuzzing # # With https://app.fuzzit.dev/ we are continuously fuzzing CoreDNS. # # Use go-fuzz and needs the tools installed. For each fuzz.go in a plugin's directory # you can start the fuzzing with: make -f Makefile.fuzz <plugin> # e.g. # # make -f Makefile.fuzz forward # # Each plugin that wants to join the fuzzing fray only needs to add a fuzz.go that calls # the plugin's ServeDNS and used the plugin/pkg/fuzz for the Do function. # # Installing go-fuzz is very tricky because it does not support Go modules, see the `Makefile` # for the current trickery. The following may do the trick: # # GO111MODULE=off go get github.com/dvyukov/go-fuzz/go-fuzz-build REPO:="github.com/coredns/coredns" FUZZIT:=v2.4.35 # set LIBFUZZER=YES to build libfuzzer compatible targets FUZZ:=$(dir $(wildcard plugin/*/fuzz.go)) # plugin/cache/ PLUGINS:=$(foreach f,$(FUZZ),$(subst plugin, ,$(f:/=))) # > /cache PLUGINS:=$(foreach f,$(PLUGINS),$(subst /, ,$(f))) # > cache .PHONY: echo echo: @echo $(PLUGINS) corefile all: $(PLUGINS) corefile .PHONY: $(PLUGINS) $(PLUGINS): echo ifeq ($(LIBFUZZER), YES) go-fuzz-build -libfuzzer -o $(@).a ./plugin/$(@) clang -fsanitize=fuzzer $(@).a -o $(@) else go-fuzz-build $(REPO)/plugin/$(@) go-fuzz -bin=./$(@)-fuzz.zip -workdir=fuzz/$(@) endif .PHONY: corefile corefile: ifeq ($(LIBFUZZER), YES) go-fuzz-build -libfuzzer -o $(@).a ./test clang -fsanitize=fuzzer $(@).a -o $(@) else go-fuzz-build $(REPO)/test go-fuzz -bin=./test-fuzz.zip -workdir=fuzz/$(@) endif fuzzit: wget --quiet -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/$(FUZZIT)/fuzzit_Linux_x86_64 && chmod +x fuzzit .PHONY: clean clean: rm *-fuzz.zip