aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2019-09-29 18:58:28 +0200
committerGitHub <noreply@github.com>2019-09-29 18:58:28 +0200
commit293ff9d58628a03f8e3fb3a55e13e2b0d4068b4f (patch)
treeb94f928cc31ccc34851b322a467ceba90825edfa
parentfb31a3bf2ed74ff0940017c3d81f36814ea1175f (diff)
parent2109d372988d301c543ac2454abe194e337642c8 (diff)
downloadafl++-293ff9d58628a03f8e3fb3a55e13e2b0d4068b4f.tar.gz
Merge pull request #71 from devnexen/netbsd_support_upd
NetBSD various support improvements
-rw-r--r--Makefile4
-rwxr-xr-xafl-system-config6
-rw-r--r--src/afl-fuzz-init.c4
-rw-r--r--src/afl-gotcpu.c26
4 files changed, 35 insertions, 5 deletions
diff --git a/Makefile b/Makefile
index aab53f6d..3a056a73 100644
--- a/Makefile
+++ b/Makefile
@@ -49,6 +49,10 @@ ifneq "$(findstring FreeBSD, $(shell uname))" ""
CFLAGS += -pthread
endif
+ifneq "$(findstring NetBSD, $(shell uname))" ""
+ CFLAGS += -pthread
+endif
+
ifeq "$(findstring clang, $(shell $(CC) --version 2>/dev/null))" ""
TEST_CC = afl-gcc
else
diff --git a/afl-system-config b/afl-system-config
index 5e3103b6..a6e0efa4 100755
--- a/afl-system-config
+++ b/afl-system-config
@@ -48,6 +48,12 @@ if [ "$PLATFORM" = "OpenBSD" ] ; then
echo
echo 'System security features cannot be disabled on OpenBSD.'
fi
+if [ "$PLATFORM" = "FreeBSD" ] ; then
+echo
+echo It is recommended to enable unprivileged users to set cpu affinity
+to be able to use afl-gotcpu meaningfully.
+/sbin/sysctl -w security.models.extensions.user_set_cpu_affinity=1
+fi
if [ "$PLATFORM" = "Darwin" ] ; then
if [ $(launchctl list 2>/dev/null | grep -q '\.ReportCrash$') ] ; then
echo We unload the default crash reporter here
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index fab82e2d..aa413e2e 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -786,7 +786,7 @@ double get_runnable_processes(void) {
static double res;
-#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__)
+#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__)
/* I don't see any portable sysctl or so that would quickly give us the
number of runnable processes; the 1-minute load average can be a
@@ -827,7 +827,7 @@ double get_runnable_processes(void) {
}
-#endif /* ^(__APPLE__ || __FreeBSD__ || __OpenBSD__) */
+#endif /* ^(__APPLE__ || __FreeBSD__ || __OpenBSD__ || __NetBSD__) */
return res;
diff --git a/src/afl-gotcpu.c b/src/afl-gotcpu.c
index c3a60c6c..ece5a850 100644
--- a/src/afl-gotcpu.c
+++ b/src/afl-gotcpu.c
@@ -52,15 +52,18 @@
#include "types.h"
#include "debug.h"
-#if defined(__linux__) || defined(__FreeBSD__)
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
#define HAVE_AFFINITY 1
# if defined(__FreeBSD__)
# include <pthread.h>
# include <pthread_np.h>
# include <sys/cpuset.h>
# define cpu_set_t cpuset_t
+# elif defined(__NetBSD__)
+# include <pthread.h>
+# include <sched.h>
# endif
-#endif /* __linux__ || __FreeBSD__ */
+#endif /* __linux__ || __FreeBSD__ || __NetBSD__ */
/* Get unix time in microseconds. */
@@ -160,17 +163,34 @@ int main(int argc, char** argv) {
if (!fr) {
- cpu_set_t c;
u32 util_perc;
+#if defined(__linux__) || defined(__FreeBSD__)
+ cpu_set_t c;
CPU_ZERO(&c);
CPU_SET(i, &c);
+#elif defined(__NetBSD__)
+ cpuset_t *c;
+
+ c = cpuset_create();
+ if (c == NULL)
+ PFATAL("cpuset_create failed");
+
+ cpuset_set(i, c);
+#endif
#if defined(__FreeBSD__)
if (pthread_setaffinity_np(pthread_self(), sizeof(c), &c))
PFATAL("pthread_setaffinity_np failed");
#endif
+#if defined(__NetBSD__)
+ if (pthread_setaffinity_np(pthread_self(), cpuset_size(c), c))
+ PFATAL("pthread_setaffinity_np failed");
+
+ cpuset_destroy(c);
+#endif
+
#if defined(__linux__)
if (sched_setaffinity(0, sizeof(c), &c))
PFATAL("sched_setaffinity failed");