aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-01-28 19:23:04 +0100
committervan Hauser <vh@thc.org>2020-01-28 19:23:04 +0100
commitbb88d98ff8f8f1b1a434643ccd30dcd48b529a64 (patch)
treec0a1883e07b16a2da32991b903e3ae53946e0b8f /src
parent465033b04a4ebfb7693925303620613a8d4a223e (diff)
downloadafl++-bb88d98ff8f8f1b1a434643ccd30dcd48b529a64.tar.gz
android: prefer bigcores
Diffstat (limited to 'src')
-rw-r--r--src/afl-fuzz-init.c38
1 files changed, 28 insertions, 10 deletions
diff --git a/src/afl-fuzz-init.c b/src/afl-fuzz-init.c
index 2ef2c4e7..6efa6227 100644
--- a/src/afl-fuzz-init.c
+++ b/src/afl-fuzz-init.c
@@ -184,11 +184,21 @@ void bind_to_free_cpu(void) {
"For this platform we do not have free CPU binding code yet. If possible, please supply a PR to https://github.com/vanhauser-thc/AFLplusplus"
#endif
- for (i = 0; i < cpu_core_count; ++i)
- if (!cpu_used[i]) break;
+ size_t cpu_start = 0;
+ try:
+#ifndef __ANDROID__
+ for (i = cpu_start; i < cpu_core_count; i++)
+ if (!cpu_used[i]) break;
if (i == cpu_core_count) {
+#else
+ for (i = cpu_core_count - cpu_start - 1; i > -1; i--)
+ if (!cpu_used[i]) break;
+ if (i == -1) {
+
+#endif
+
SAYF("\n" cLRD "[-] " cRST
"Uh-oh, looks like all %d CPU cores on your system are allocated to\n"
" other instances of afl-fuzz (or similar CPU-locked tasks). "
@@ -197,12 +207,11 @@ void bind_to_free_cpu(void) {
"you are\n"
" absolutely sure, you can set AFL_NO_AFFINITY and try again.\n",
cpu_core_count);
-
FATAL("No more free CPU cores");
}
- OKF("Found a free CPU core, binding to #%u.", i);
+ OKF("Found a free CPU core, try binding to #%u.", i);
cpu_aff = i;
@@ -212,22 +221,31 @@ void bind_to_free_cpu(void) {
#elif defined(__NetBSD__)
c = cpuset_create();
if (c == NULL) PFATAL("cpuset_create failed");
-
cpuset_set(i, c);
#endif
#if defined(__linux__)
- if (sched_setaffinity(0, sizeof(c), &c)) PFATAL("sched_setaffinity failed");
+ if (sched_setaffinity(0, sizeof(c), &c)) {
+
+ if (cpu_start == cpu_core_count)
+ PFATAL("sched_setaffinity failed for CPU %d, exit", i);
+ WARNF("sched_setaffinity failed to CPU %d, trying next CPU", i);
+ cpu_start++;
+ goto try
+ ;
+
+ }
+
#elif defined(__FreeBSD__) || defined(__DragonFly__)
if (pthread_setaffinity_np(pthread_self(), sizeof(c), &c))
PFATAL("pthread_setaffinity failed");
#elif defined(__NetBSD__)
- if (pthread_setaffinity_np(pthread_self(), cpuset_size(c), c))
- PFATAL("pthread_setaffinity failed");
+if (pthread_setaffinity_np(pthread_self(), cpuset_size(c), c))
+ PFATAL("pthread_setaffinity failed");
- cpuset_destroy(c);
+cpuset_destroy(c);
#else
- // this will need something for other platforms
+// this will need something for other platforms
#endif
}