diff options
-rw-r--r-- | Makefile | 4 | ||||
-rwxr-xr-x | afl-system-config | 6 | ||||
-rw-r--r-- | src/afl-fuzz-init.c | 4 | ||||
-rw-r--r-- | src/afl-gotcpu.c | 26 |
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"); |