about summary refs log tree commit diff
diff options
context:
space:
mode:
-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");