aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2024-06-12 09:16:59 +0200
committervanhauser-thc <vh@thc.org>2024-06-12 09:17:07 +0200
commit0c9b460cc46aebfa4eb6e1fbe928895c0a8fcfbd (patch)
tree9962b54d222e7feabcf5b440a2a6271c7477427c
parente68d57feecd25a9698bc4df0c9b38274a7d4ebbe (diff)
downloadafl++-0c9b460cc46aebfa4eb6e1fbe928895c0a8fcfbd.tar.gz
MONOTONIC
-rw-r--r--docs/Changelog.md4
-rw-r--r--src/afl-common.c55
2 files changed, 47 insertions, 12 deletions
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 1590b2df..caad513c 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -4,6 +4,10 @@
release of the tool. See README.md for the general instruction manual.
### Version ++4.22a (dev)
+ - afl-fuzz:
+ - the reason for the regression in 4.20c has been found, COARSE timing
+ is measuring too broad for our purpose, MONOTONIC is fine and better
+ than gettimeofday() so switching to this
- frida_mode:
- AFL_FRIDA_PERSISTENT_ADDR can now be be any reachable address not just
a function entry
diff --git a/src/afl-common.c b/src/afl-common.c
index efdb5d60..efe680a8 100644
--- a/src/afl-common.c
+++ b/src/afl-common.c
@@ -59,6 +59,43 @@ u8 last_intr = 0;
#define AFL_PATH "/usr/local/lib/afl/"
#endif
+/* Convert seconds to milliseconds. */
+#define SEC_TO_MS(sec) ((sec) * 1000)
+/* Convert seconds to microseconds. */
+#define SEC_TO_US(sec) ((sec) * 1000000)
+/* Convert nanoseconds to milliseconds. */
+#define NS_TO_MS(ns) ((ns) / 1000000)
+/* Convert nanoseconds to microseconds. */
+#define NS_TO_US(ns) ((ns) / 1000)
+/* Convert seconds to milliseconds. */
+#define SEC_TO_MS(sec) ((sec) * 1000)
+/* Convert seconds to microseconds. */
+#define SEC_TO_US(sec) ((sec) * 1000000)
+/* Convert nanoseconds to milliseconds. */
+#define NS_TO_MS(ns) ((ns) / 1000000)
+/* Convert nanoseconds to microseconds. */
+#define NS_TO_US(ns) ((ns) / 1000)
+/* Convert nanoseconds to microseconds. */
+#define US_TO_MS(us) ((us) / 1000)
+/* Convert seconds to milliseconds. */
+#define SEC_TO_MS(sec) ((sec) * 1000)
+/* Convert seconds to microseconds. */
+#define SEC_TO_US(sec) ((sec) * 1000000)
+/* Convert nanoseconds to milliseconds. */
+#define NS_TO_MS(ns) ((ns) / 1000000)
+/* Convert nanoseconds to microseconds. */
+#define NS_TO_US(ns) ((ns) / 1000)
+/* Convert seconds to milliseconds. */
+#define SEC_TO_MS(sec) ((sec) * 1000)
+/* Convert seconds to microseconds. */
+#define SEC_TO_US(sec) ((sec) * 1000000)
+/* Convert nanoseconds to milliseconds. */
+#define NS_TO_MS(ns) ((ns) / 1000000)
+/* Convert nanoseconds to microseconds. */
+#define NS_TO_US(ns) ((ns) / 1000)
+/* Convert nanoseconds to microseconds. */
+#define US_TO_MS(us) ((us) / 1000)
+
void *afl_memmem(const void *haystack, size_t haystacklen, const void *needle,
size_t needlelen) {
@@ -976,12 +1013,9 @@ void read_bitmap(u8 *fname, u8 *map, size_t len) {
inline u64 get_cur_time(void) {
- struct timeval tv;
- struct timezone tz;
-
- gettimeofday(&tv, &tz);
-
- return (tv.tv_sec * 1000ULL) + (tv.tv_usec / 1000);
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+ return (u64)(SEC_TO_MS((uint64_t)ts.tv_sec) + NS_TO_MS((uint64_t)ts.tv_nsec));
}
@@ -989,12 +1023,9 @@ inline u64 get_cur_time(void) {
inline u64 get_cur_time_us(void) {
- struct timeval tv;
- struct timezone tz;
-
- gettimeofday(&tv, &tz);
-
- return (tv.tv_sec * 1000000ULL) + tv.tv_usec;
+ struct timespec ts;
+ (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+ return (u64)(SEC_TO_US((uint64_t)ts.tv_sec) + NS_TO_US((uint64_t)ts.tv_nsec));
}