summaryrefslogtreecommitdiff
path: root/examples/bind/bind-9.13.2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'examples/bind/bind-9.13.2.patch')
-rw-r--r--examples/bind/bind-9.13.2.patch472
1 files changed, 0 insertions, 472 deletions
diff --git a/examples/bind/bind-9.13.2.patch b/examples/bind/bind-9.13.2.patch
deleted file mode 100644
index 85a75c5a..00000000
--- a/examples/bind/bind-9.13.2.patch
+++ /dev/null
@@ -1,472 +0,0 @@
-diff -Nur ORIG.bind-9.13.2/bin/named/fuzz.c bind-9.13.2/bin/named/fuzz.c
---- ORIG.bind-9.13.2/bin/named/fuzz.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/bin/named/fuzz.c 2018-08-04 03:54:45.754294759 +0200
-@@ -33,10 +33,6 @@
- #include <unistd.h>
- #include <pthread.h>
-
--#ifndef __AFL_LOOP
--#error To use American Fuzzy Lop you have to set CC to afl-clang-fast!!!
--#endif
--
- /*
- * We are using pthreads directly because we might be using it with
- * unthreaded version of BIND, where all thread functions are
-@@ -589,7 +585,6 @@
- * this signature ("##SIG_AFL_PERSISTENT##") and runs the binary
- * in persistent mode if it's present.
- */
-- __AFL_LOOP(0);
-
- return (NULL);
- }
-@@ -739,7 +734,9 @@
- return;
- }
-
-+#if 0
- raise(SIGSTOP);
-+#endif
-
- RUNTIME_CHECK(pthread_mutex_lock(&mutex) == 0);
-
-@@ -752,8 +749,7 @@
-
- void
- named_fuzz_setup(void) {
--#ifdef ENABLE_AFL
-- if (getenv("__AFL_PERSISTENT") || getenv("AFL_CMIN")) {
-+#if 0
- pthread_t thread;
- void *(fn) = NULL;
-
-@@ -779,6 +775,5 @@
- RUNTIME_CHECK(pthread_mutex_init(&mutex, NULL) == 0);
- RUNTIME_CHECK(pthread_cond_init(&cond, NULL) == 0);
- RUNTIME_CHECK(pthread_create(&thread, NULL, fn, NULL) == 0);
-- }
- #endif /* ENABLE_AFL */
- }
-diff -Nur ORIG.bind-9.13.2/bin/named/main.c bind-9.13.2/bin/named/main.c
---- ORIG.bind-9.13.2/bin/named/main.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/bin/named/main.c 2018-08-04 03:57:28.339549734 +0200
-@@ -1318,13 +1318,262 @@
- }
- #endif /* HAVE_LIBSCF */
-
-+#include <named/globals.h>
-+
-+#include <arpa/inet.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <net/if.h>
-+#include <net/route.h>
-+#include <netinet/ip6.h>
-+#include <netinet/tcp.h>
-+#include <pthread.h>
-+#include <sched.h>
-+#include <sys/ioctl.h>
-+#include <sys/resource.h>
-+#include <sys/socket.h>
-+#include <sys/stat.h>
-+#include <sys/time.h>
-+#include <sys/types.h>
-+#include <sys/uio.h>
-+#include <sys/wait.h>
-+#include <unistd.h>
-+
-+#include <libhfcommon/util.h>
-+#include <libhfuzz/libhfuzz.h>
-+
-+static void enter_namespaces(void) {
-+ if (linuxEnterNs(CLONE_NEWUSER | CLONE_NEWNET | CLONE_NEWNS | CLONE_NEWIPC) == false) {
-+ exit(1);
-+ }
-+ if (linuxIfaceUp("lo") == false) {
-+ exit(1);
-+ }
-+ if (linuxMountTmpfs("/tmp") == false) {
-+ exit(1);
-+ }
-+}
-+
-+static size_t rlen = 0;
-+static const uint8_t *rbuf = NULL;
-+
-+__attribute__((no_sanitize("memory"))) __attribute__((no_sanitize("address"))) static void *
-+bind_thr(void *unused __attribute__((unused))) {
-+ while (!named_g_run_done) {
-+ usleep(10000);
-+ }
-+
-+ int myfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
-+ if (myfd == -1) {
-+ perror("socket");
-+ exit(1);
-+ }
-+ int val = 1;
-+ if (setsockopt(myfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) == -1) {
-+ perror("setsockopt(SO_REUSEADDR)");
-+ }
-+
-+ const struct sockaddr_in saddr = {
-+ .sin_family = AF_INET,
-+ .sin_port = htons(53),
-+ .sin_addr.s_addr = inet_addr("127.0.0.2"),
-+ };
-+ if (bind(myfd, &saddr, sizeof(saddr)) == -1) {
-+ perror("bind");
-+ exit(1);
-+ }
-+
-+ if (listen(myfd, SOMAXCONN) == -1) {
-+ perror("listen");
-+ exit(1);
-+ }
-+
-+ for (;;) {
-+ struct sockaddr_in cli;
-+ socklen_t cli_len = sizeof(cli);
-+
-+ int nfd = accept(myfd, &cli, &cli_len);
-+ if (nfd == -1) {
-+ perror("accept");
-+ exit(1);
-+ }
-+
-+ static char b[1024 * 1024];
-+ ssize_t sz = recv(nfd, b, sizeof(b), 0);
-+ if (sz <= 0) {
-+ perror("recv");
-+ _exit(1);
-+ }
-+ if (sz < 4) {
-+ close(nfd);
-+ continue;
-+ }
-+
-+ /* It's a response, so set QR bit to 1 */
-+ uint8_t qr = rbuf[0] | 0x80;
-+
-+ uint16_t t_l = htons(rlen + 2);
-+ const struct iovec iov[] = {
-+ {
-+ .iov_base = &t_l,
-+ .iov_len = sizeof(t_l),
-+ },
-+ {
-+ .iov_base = &b[2],
-+ .iov_len = 2,
-+ },
-+ {
-+ .iov_base = &qr,
-+ .iov_len = 1,
-+ },
-+ {
-+ .iov_base = (void *)&rbuf[1],
-+ .iov_len = rlen - 1,
-+ },
-+ };
-+
-+ if (writev(nfd, iov, 4) == -1) {
-+ perror("writev() failed");
-+ }
-+
-+ close(nfd);
-+ }
-+
-+ return NULL;
-+}
-+
-+static void rndloop(int sock) {
-+ const struct sockaddr_in bsaddr = {
-+ .sin_family = AF_INET,
-+ .sin_port = htons(0),
-+ .sin_addr.s_addr = htonl((((uint32_t)util_rnd64()) & 0x00FFFFFF) | 0x7F000000),
-+ };
-+ if (bind(sock, (const struct sockaddr *)&bsaddr, sizeof(bsaddr)) == -1) {
-+ perror("bind");
-+ }
-+}
-+
-+__attribute__((no_sanitize("memory"))) __attribute__((no_sanitize("address"))) static void *
-+connect_thr(void *unused __attribute__((unused))) {
-+ while (!named_g_run_done) {
-+ usleep(10000);
-+ }
-+ usleep(100000);
-+
-+ for (;;) {
-+ int myfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
-+ if (myfd == -1) {
-+ perror("socket");
-+ exit(1);
-+ }
-+ int val = 1;
-+ if (setsockopt(myfd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)) == -1) {
-+ perror("setsockopt(SO_REUSEADDR)");
-+ }
-+
-+ rndloop(myfd);
-+
-+ const struct sockaddr_in saddr = {
-+ .sin_family = AF_INET,
-+ .sin_port = htons(53),
-+ .sin_addr.s_addr = htonl(INADDR_LOOPBACK),
-+ };
-+ if (connect(myfd, &saddr, sizeof(saddr)) == -1) {
-+ close(myfd);
-+ continue;
-+ }
-+
-+ const uint8_t *buf;
-+ size_t len;
-+ HF_ITER(&buf, &len);
-+
-+ rlen = 0;
-+ rbuf = NULL;
-+
-+ if (len < 32) {
-+ close(myfd);
-+ continue;
-+ }
-+
-+ uint32_t tmplen = *((const uint32_t *)buf);
-+
-+ buf = &buf[sizeof(uint32_t)];
-+ len -= sizeof(uint32_t);
-+
-+ tmplen %= len;
-+
-+ rbuf = &buf[tmplen];
-+ rlen = len - tmplen;
-+ len = tmplen;
-+
-+ uint16_t t_l = htons(len);
-+ const struct iovec iov[] = {
-+ {
-+ .iov_base = &t_l,
-+ .iov_len = sizeof(t_l),
-+ },
-+ {
-+ .iov_base = (void *)buf,
-+ .iov_len = len,
-+ },
-+ };
-+
-+ if (writev(myfd, iov, 2) == -1) {
-+ perror("write");
-+ close(myfd);
-+ continue;
-+ }
-+
-+ if (shutdown(myfd, SHUT_WR) == -1) {
-+ if (errno == ENOTCONN) {
-+ close(myfd);
-+ continue;
-+ }
-+ perror("shutdown");
-+ _exit(1);
-+ }
-+
-+ uint8_t b[1024 * 512];
-+ while (recv(myfd, b, sizeof(b), 0) > 0)
-+ ;
-+ close(myfd);
-+ }
-+}
-+
-+static void launch_thr(void) {
-+ pthread_attr_t attr;
-+ pthread_attr_init(&attr);
-+ pthread_attr_setstacksize(&attr, 1024 * 1024 * 4);
-+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-+
-+ pthread_t t;
-+ if (pthread_create(&t, &attr, bind_thr, NULL) < 0) {
-+ perror("pthread_create(bind_thr)");
-+ exit(1);
-+ }
-+
-+ pthread_attr_init(&attr);
-+ pthread_attr_setstacksize(&attr, 1024 * 1024 * 4);
-+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
-+ if (pthread_create(&t, &attr, connect_thr, NULL) < 0) {
-+ perror("pthread_create(connect_thr)");
-+ exit(1);
-+ }
-+}
-+
- /* main entry point, possibly hooked */
-
--int
--main(int argc, char *argv[]) {
-- isc_result_t result;
-+int main(int argc, char *argv[]) {
-+ if (!getenv("NO_FUZZ")) {
-+ named_g_fuzz_addr = "127.0.0.1:53";
-+ named_g_fuzz_type = isc_fuzz_client;
-+ enter_namespaces();
-+ launch_thr();
-+ }
-+
-+ isc_result_t result;
- #ifdef HAVE_LIBSCF
-- char *instance = NULL;
-+ char *instance = NULL;
- #endif
-
- #ifdef HAVE_GPERFTOOLS_PROFILER
-@@ -1373,17 +1622,17 @@
-
- parse_command_line(argc, argv);
-
--#ifdef ENABLE_AFL
-+#if 0
- if (named_g_fuzz_type != isc_fuzz_none) {
- named_fuzz_setup();
- }
-+#endif
-
- if (named_g_fuzz_type == isc_fuzz_resolver) {
- dns_resolver_setfuzzing();
- } else if (named_g_fuzz_type == isc_fuzz_http) {
- isc_httpd_setfinishhook(named_fuzz_notify);
- }
--#endif
- /*
- * Warn about common configuration error.
- */
-diff -Nur ORIG.bind-9.13.2/bin/named/server.c bind-9.13.2/bin/named/server.c
---- ORIG.bind-9.13.2/bin/named/server.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/bin/named/server.c 2018-08-04 03:54:45.762294623 +0200
-@@ -9202,7 +9202,7 @@
- "loading configuration");
-
- CHECKFATAL(load_zones(server, ISC_TRUE, ISC_FALSE), "loading zones");
--#ifdef ENABLE_AFL
-+#if 1
- named_g_run_done = ISC_TRUE;
- #endif
- }
-diff -Nur ORIG.bind-9.13.2/compile.sh bind-9.13.2/compile.sh
---- ORIG.bind-9.13.2/compile.sh 1970-01-01 01:00:00.000000000 +0100
-+++ bind-9.13.2/compile.sh 2018-08-04 03:59:40.557326027 +0200
-@@ -0,0 +1,25 @@
-+#!/bin/sh
-+
-+set -ex
-+
-+export CC=/home/jagger/src/honggfuzz/hfuzz_cc/hfuzz-clang
-+export CXX=/home/jagger/src/honggfuzz/hfuzz_cc/hfuzz-clang++
-+export CFLAGS="-fsanitize=address -Wno-shift-negative-value -Wno-logical-not-parentheses -g -ggdb -O0"
-+./configure \
-+ --prefix=/home/jagger/fuzz/bind/dist/ \
-+ --enable-threads \
-+ --without-gssapi \
-+ --disable-chroot \
-+ --disable-linux-caps \
-+ --enable-seccomp \
-+ --without-libtool \
-+ --enable-ipv6 \
-+ --enable-atomic \
-+ --enable-epoll \
-+ --enable-afl \
-+ --disable-crypto-rand \
-+ --disable-backtrace \
-+ --with-openssl=yes
-+
-+make clean
-+make -j$(nproc)
-diff -Nur ORIG.bind-9.13.2/lib/dns/request.c bind-9.13.2/lib/dns/request.c
---- ORIG.bind-9.13.2/lib/dns/request.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/lib/dns/request.c 2018-08-04 03:54:45.762294623 +0200
-@@ -770,6 +770,7 @@
-
- if ((options & DNS_REQUESTOPT_TCP) != 0 || r.length > 512)
- tcp = ISC_TRUE;
-+ tcp = ISC_TRUE;
- share = ISC_TF((options & DNS_REQUESTOPT_SHARE) != 0);
-
- again:
-@@ -1050,6 +1051,8 @@
- req_render(dns_message_t *message, isc_buffer_t **bufferp,
- unsigned int options, isc_mem_t *mctx)
- {
-+ options |= DNS_REQUESTOPT_TCP;
-+
- isc_buffer_t *buf1 = NULL;
- isc_buffer_t *buf2 = NULL;
- isc_result_t result;
-@@ -1106,9 +1109,10 @@
- * Copy rendered message to exact sized buffer.
- */
- isc_buffer_usedregion(buf1, &r);
-+ options |= DNS_REQUESTOPT_TCP;
- if ((options & DNS_REQUESTOPT_TCP) != 0) {
- tcp = ISC_TRUE;
-- } else if (r.length > 512) {
-+ } else if (r.length >= 512) {
- result = DNS_R_USETCP;
- goto cleanup;
- }
-diff -Nur ORIG.bind-9.13.2/lib/dns/resolver.c bind-9.13.2/lib/dns/resolver.c
---- ORIG.bind-9.13.2/lib/dns/resolver.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/lib/dns/resolver.c 2018-08-04 03:54:45.766294556 +0200
-@@ -1911,6 +1911,7 @@
- }
- query->mctx = fctx->mctx;
- query->options = options;
-+ query->options = options | DNS_FETCHOPT_TCP;
- query->attributes = 0;
- query->sends = 0;
- query->connects = 0;
-diff -Nur ORIG.bind-9.13.2/lib/isc/random.c bind-9.13.2/lib/isc/random.c
---- ORIG.bind-9.13.2/lib/isc/random.c 2018-07-03 09:51:40.000000000 +0200
-+++ bind-9.13.2/lib/isc/random.c 2018-08-04 03:56:14.688791575 +0200
-@@ -73,6 +73,7 @@
- isc_random8(void) {
- RUNTIME_CHECK(isc_once_do(&isc_random_once,
- isc_random_initialize) == ISC_R_SUCCESS);
-+ return 1;
- return (next() & 0xff);
- }
-
-@@ -80,6 +81,7 @@
- isc_random16(void) {
- RUNTIME_CHECK(isc_once_do(&isc_random_once,
- isc_random_initialize) == ISC_R_SUCCESS);
-+ return 1;
- return (next() & 0xffff);
- }
-
-@@ -87,6 +89,7 @@
- isc_random32(void) {
- RUNTIME_CHECK(isc_once_do(&isc_random_once,
- isc_random_initialize) == ISC_R_SUCCESS);
-+ return 1;
- return (next());
- }
-
-@@ -101,6 +104,12 @@
- RUNTIME_CHECK(isc_once_do(&isc_random_once,
- isc_random_initialize) == ISC_R_SUCCESS);
-
-+ for (size_t z = 0; z < buflen; z++) {
-+ char * b = (char*)buf;
-+ b[z] = z + 1;
-+ }
-+ return;
-+
- for (i = 0; i + sizeof(r) <= buflen; i += sizeof(r)) {
- r = next();
- memmove((uint8_t *)buf + i, &r, sizeof(r)); /* Buffers cannot
-@@ -126,6 +135,8 @@
- return (0);
- }
-
-+ return 1;
-+
- #if (ULONG_MAX > 0xffffffffUL)
- min = 0x100000000UL % upper_bound;
- #else /* if (ULONG_MAX > 0xffffffffUL) */