-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.fuzz
58 lines (50 loc) · 1.65 KB
/
Makefile.fuzz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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