From 157742be7deb5e5e12d962b20907b8e2e7733ac6 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 8 Mar 2017 11:00:22 +0100 Subject: fuzz: Add fuzzing boilerplate --- fuzz/.gitignore | 1 + fuzz/Makefile.am | 12 ++++++++++++ fuzz/fuzz_certs.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 fuzz/.gitignore create mode 100644 fuzz/Makefile.am create mode 100644 fuzz/fuzz_certs.c (limited to 'fuzz') diff --git a/fuzz/.gitignore b/fuzz/.gitignore new file mode 100644 index 000000000..64271a6dd --- /dev/null +++ b/fuzz/.gitignore @@ -0,0 +1 @@ +fuzz_certs \ No newline at end of file diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am new file mode 100644 index 000000000..f2a84c1e7 --- /dev/null +++ b/fuzz/Makefile.am @@ -0,0 +1,12 @@ +AM_CPPFLAGS = \ + -I$(top_srcdir)/src/libstrongswan \ + -DPLUGINDIR=\""$(abs_top_builddir)/src/libstrongswan/plugins\"" \ + -DPLUGINS="\"${fuzz_plugins}\"" + +noinst_PROGRAMS = fuzz_certs + +fuzz_certs_SOURCES = fuzz_certs.c + +fuzz_certs_LDFLAGS = libFuzzer.a -lstdc++ + +fuzz_certs_LDADD = $(top_builddir)/src/libstrongswan/libstrongswan.la diff --git a/fuzz/fuzz_certs.c b/fuzz/fuzz_certs.c new file mode 100644 index 000000000..3100eb5f9 --- /dev/null +++ b/fuzz/fuzz_certs.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2017 Tobias Brunner + * HSR Hochschule fuer Technik Rapperswil + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See . + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + */ + +#include +#include + +int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) +{ + certificate_t *cert; + chunk_t chunk; + + dbg_default_set_level(-1); + library_init(NULL, "fuzz_certs"); + plugin_loader_add_plugindirs(PLUGINDIR, PLUGINS); + if (!lib->plugins->load(lib->plugins, PLUGINS)) + { + return 1; + } + + chunk = chunk_create((u_char*)buf, len); + cert = lib->creds->create(lib->creds, CRED_CERTIFICATE, CERT_X509, + BUILD_BLOB, chunk, BUILD_END); + DESTROY_IF(cert); + + lib->plugins->unload(lib->plugins); + library_deinit(); + return 0; +} -- cgit v1.2.3