• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash -eux
2# Copyright 2019 Google Inc.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16################################################################################
17# util/storage/lookup3.c has some code that triggers the address sanitizer, but
18# according to a comment is OK. -DVALGRIND turns on an alternate version of that
19# code.
20CFLAGS="${CFLAGS} -DVALGRIND=1"
21./configure
22make -j6 all
23
24$CC $CFLAGS -I. -DSRCDIR=. -c -o parse_packet_fuzzer.o parse_packet_fuzzer.c
25$CC $CFLAGS -I. -DSRCDIR=. -c -o fuzz_1.o fuzz_1.c
26$CC $CFLAGS -I. -DSRCDIR=. -c -o fuzz_2.o fuzz_2.c
27$CC $CFLAGS -I. -DSRCDIR=. -c -o fuzz_3.o fuzz_3.c
28$CC $CFLAGS -I. -DSRCDIR=. -c -o fuzz_4.o fuzz_4.c
29
30# get the LIBOBJS with the replaced functions needed for linking.
31LIBOBJS=`make --eval 'echolibobjs: ; @echo "$(LIBOBJS)"' echolibobjs`
32
33$CXX $CXXFLAGS -std=c++11 \
34  $LIB_FUZZING_ENGINE \
35  -lssl -lcrypto -pthread \
36  -o $OUT/parse_packet_fuzzer \
37  parse_packet_fuzzer.o \
38  dns.o infra.o rrset.o dname.o \
39  msgencode.o as112.o msgparse.o msgreply.o packed_rrset.o iterator.o \
40  iter_delegpt.o iter_donotq.o iter_fwd.o iter_hints.o iter_priv.o \
41  iter_resptype.o iter_scrub.o iter_utils.o localzone.o mesh.o modstack.o view.o \
42  outbound_list.o alloc.o config_file.o configlexer.o configparser.o \
43  fptr_wlist.o edns.o locks.o log.o mini_event.o module.o net_help.o random.o \
44  rbtree.o regional.o rtt.o dnstree.o lookup3.o lruhash.o slabhash.o \
45  tcp_conn_limit.o timehist.o tube.o winsock_event.o autotrust.o val_anchor.o \
46  validator.o val_kcache.o val_kentry.o val_neg.o val_nsec3.o val_nsec.o \
47  val_secalgo.o val_sigcrypt.o val_utils.o dns64.o cachedb.o redis.o authzone.o \
48  respip.o netevent.o listen_dnsport.o outside_network.o ub_event.o keyraw.o \
49  sbuffer.o wire2str.o parse.o parseutil.o rrdef.o str2wire.o libunbound.o \
50  libworker.o context.o \
51  $LIBOBJS
52
53$CXX $CXXFLAGS -std=c++11 \
54  $LIB_FUZZING_ENGINE \
55  -lssl -lcrypto -pthread \
56  -o $OUT/fuzz_1_fuzzer \
57  fuzz_1.o \
58  dns.o infra.o rrset.o dname.o \
59  msgencode.o as112.o msgparse.o msgreply.o packed_rrset.o iterator.o \
60  iter_delegpt.o iter_donotq.o iter_fwd.o iter_hints.o iter_priv.o \
61  iter_resptype.o iter_scrub.o iter_utils.o localzone.o mesh.o modstack.o view.o \
62  outbound_list.o alloc.o config_file.o configlexer.o configparser.o \
63  fptr_wlist.o edns.o locks.o log.o mini_event.o module.o net_help.o random.o \
64  rbtree.o regional.o rtt.o dnstree.o lookup3.o lruhash.o slabhash.o \
65  tcp_conn_limit.o timehist.o tube.o winsock_event.o autotrust.o val_anchor.o \
66  validator.o val_kcache.o val_kentry.o val_neg.o val_nsec3.o val_nsec.o \
67  val_secalgo.o val_sigcrypt.o val_utils.o dns64.o cachedb.o redis.o authzone.o \
68  respip.o netevent.o listen_dnsport.o outside_network.o ub_event.o keyraw.o \
69  sbuffer.o wire2str.o parse.o parseutil.o rrdef.o str2wire.o libunbound.o \
70  libworker.o context.o \
71  $LIBOBJS
72
73$CXX $CXXFLAGS -std=c++11 \
74  $LIB_FUZZING_ENGINE \
75  -lssl -lcrypto -pthread \
76  -o $OUT/fuzz_2_fuzzer \
77  fuzz_2.o \
78  dns.o infra.o rrset.o dname.o \
79  msgencode.o as112.o msgparse.o msgreply.o packed_rrset.o iterator.o \
80  iter_delegpt.o iter_donotq.o iter_fwd.o iter_hints.o iter_priv.o \
81  iter_resptype.o iter_scrub.o iter_utils.o localzone.o mesh.o modstack.o view.o \
82  outbound_list.o alloc.o config_file.o configlexer.o configparser.o \
83  fptr_wlist.o edns.o locks.o log.o mini_event.o module.o net_help.o random.o \
84  rbtree.o regional.o rtt.o dnstree.o lookup3.o lruhash.o slabhash.o \
85  tcp_conn_limit.o timehist.o tube.o winsock_event.o autotrust.o val_anchor.o \
86  validator.o val_kcache.o val_kentry.o val_neg.o val_nsec3.o val_nsec.o \
87  val_secalgo.o val_sigcrypt.o val_utils.o dns64.o cachedb.o redis.o authzone.o \
88  respip.o netevent.o listen_dnsport.o outside_network.o ub_event.o keyraw.o \
89  sbuffer.o wire2str.o parse.o parseutil.o rrdef.o str2wire.o libunbound.o \
90  libworker.o context.o \
91  $LIBOBJS
92
93$CXX $CXXFLAGS -std=c++11 \
94  $LIB_FUZZING_ENGINE \
95  -lssl -lcrypto -pthread \
96  -o $OUT/fuzz_3_fuzzer \
97  fuzz_3.o \
98  dns.o infra.o rrset.o dname.o \
99  msgencode.o as112.o msgparse.o msgreply.o packed_rrset.o iterator.o \
100  iter_delegpt.o iter_donotq.o iter_fwd.o iter_hints.o iter_priv.o \
101  iter_resptype.o iter_scrub.o iter_utils.o localzone.o mesh.o modstack.o view.o \
102  outbound_list.o alloc.o config_file.o configlexer.o configparser.o \
103  fptr_wlist.o edns.o locks.o log.o mini_event.o module.o net_help.o random.o \
104  rbtree.o regional.o rtt.o dnstree.o lookup3.o lruhash.o slabhash.o \
105  tcp_conn_limit.o timehist.o tube.o winsock_event.o autotrust.o val_anchor.o \
106  validator.o val_kcache.o val_kentry.o val_neg.o val_nsec3.o val_nsec.o \
107  val_secalgo.o val_sigcrypt.o val_utils.o dns64.o cachedb.o redis.o authzone.o \
108  respip.o netevent.o listen_dnsport.o outside_network.o ub_event.o keyraw.o \
109  sbuffer.o wire2str.o parse.o parseutil.o rrdef.o str2wire.o libunbound.o \
110  libworker.o context.o \
111  $LIBOBJS
112
113$CXX $CXXFLAGS -std=c++11 \
114  $LIB_FUZZING_ENGINE \
115  -lssl -lcrypto -pthread \
116  -o $OUT/fuzz_4_fuzzer \
117  fuzz_4.o \
118  dns.o infra.o rrset.o dname.o \
119  msgencode.o as112.o msgparse.o msgreply.o packed_rrset.o iterator.o \
120  iter_delegpt.o iter_donotq.o iter_fwd.o iter_hints.o iter_priv.o \
121  iter_resptype.o iter_scrub.o iter_utils.o localzone.o mesh.o modstack.o view.o \
122  outbound_list.o alloc.o config_file.o configlexer.o configparser.o \
123  fptr_wlist.o edns.o locks.o log.o mini_event.o module.o net_help.o random.o \
124  rbtree.o regional.o rtt.o dnstree.o lookup3.o lruhash.o slabhash.o \
125  tcp_conn_limit.o timehist.o tube.o winsock_event.o autotrust.o val_anchor.o \
126  validator.o val_kcache.o val_kentry.o val_neg.o val_nsec3.o val_nsec.o \
127  val_secalgo.o val_sigcrypt.o val_utils.o dns64.o cachedb.o redis.o authzone.o \
128  respip.o netevent.o listen_dnsport.o outside_network.o ub_event.o keyraw.o \
129  sbuffer.o wire2str.o parse.o parseutil.o rrdef.o str2wire.o libunbound.o \
130  libworker.o context.o \
131  $LIBOBJS
132
133wget --directory-prefix $OUT https://github.com/jsha/unbound/raw/fuzzing-corpora/testdata/parse_packet_fuzzer_seed_corpus.zip
134wget --directory-prefix $OUT https://github.com/luisx41/fuzzing-corpus/raw/master/projects/unbound/fuzz_1_fuzzer_seed_corpus.zip
135wget --directory-prefix $OUT https://github.com/luisx41/fuzzing-corpus/raw/master/projects/unbound/fuzz_2_fuzzer_seed_corpus.zip
136wget --directory-prefix $OUT https://github.com/luisx41/fuzzing-corpus/raw/master/projects/unbound/fuzz_3_fuzzer_seed_corpus.zip
137wget --directory-prefix $OUT https://github.com/luisx41/fuzzing-corpus/raw/master/projects/unbound/fuzz_4_fuzzer_seed_corpus.zip
138