* Change timing functions to gettimeofday() instead of time() for more

precision.
This commit is contained in:
Sam Hocevar 2007-01-12 15:47:48 +00:00 committed by sam
parent 61a673c096
commit c5ce65e161
5 changed files with 72 additions and 12 deletions

View File

@ -1,3 +1,4 @@
# $Id$
SUBDIRS = src test doc
DIST_SUBDIRS = $(SUBDIRS)

View File

@ -1,7 +1,9 @@
# $Id$
COMMON = random.c random.h fd.c fd.h fuzz.c fuzz.h
bin_PROGRAMS = zzuf
zzuf_SOURCES = zzuf.c $(COMMON) md5.c md5.h
zzuf_SOURCES = zzuf.c $(COMMON) md5.c md5.h timer.c timer.h
zzuf_CFLAGS = -DLIBDIR=\"$(libdir)/zzuf\"
pkglib_LTLIBRARIES = libzzuf.la

38
src/timer.c Normal file
View File

@ -0,0 +1,38 @@
/*
* zzuf - general purpose fuzzer
* Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
* All Rights Reserved
*
* $Id$
*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/
/*
* timer.c: timing functions
*/
#include "config.h"
#if defined HAVE_STDINT_H
# include <stdint.h>
#elif defined HAVE_INTTYPES_H
# include <inttypes.h>
#endif
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include "timer.h"
int64_t _zz_time(void)
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
}

20
src/timer.h Normal file
View File

@ -0,0 +1,20 @@
/*
* zzuf - general purpose fuzzer
* Copyright (c) 2006, 2007 Sam Hocevar <sam@zoy.org>
* All Rights Reserved
*
* $Id$
*
* This program is free software. It comes without any warranty, to
* the extent permitted by applicable law. You can redistribute it
* and/or modify it under the terms of the Do What The Fuck You Want
* To Public License, Version 2, as published by Sam Hocevar. See
* http://sam.zoy.org/wtfpl/COPYING for more details.
*/
/*
* timer.h: timing functions
*/
int64_t _zz_time(void);

View File

@ -33,8 +33,6 @@
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <sys/time.h>
#include <time.h>
#include <sys/wait.h>
#include <sys/time.h>
#include <sys/resource.h>
@ -44,6 +42,7 @@
#include "fd.h"
#include "fuzz.h"
#include "md5.h"
#include "timer.h"
static void spawn_child(char **);
static void clean_children(void);
@ -71,7 +70,7 @@ static struct child_list
pid_t pid;
int fd[3]; /* 0 is debug, 1 is stderr, 2 is stdout */
int bytes, seed;
time_t date;
int64_t date;
struct md5 *ctx;
} *child_list;
static int maxforks = 1, child_count = 0, maxcrashes = 1, crashes = 0;
@ -83,7 +82,7 @@ static int maxbytes = -1;
static int md5 = 0;
static int checkexit = 0;
static int maxmem = -1;
static double maxtime = -1.0;
static int64_t maxtime = -1;
#define ZZUF_FD_SET(fd, p_fdset, maxfd) \
if(fd >= 0) \
@ -214,7 +213,7 @@ int main(int argc, char *argv[])
setenv("ZZUF_SIGNAL", "1", 1);
break;
case 'T': /* --max-time */
maxtime = atof(optarg);
maxtime = (int64_t)(atof(optarg) * 1000000.0);
break;
case 'x': /* --check-exit */
checkexit = 1;
@ -468,7 +467,7 @@ static void spawn_child(char **argv)
}
/* Were the parent, acknowledge spawn */
child_list[i].date = time(NULL);
child_list[i].date = _zz_time();
child_list[i].pid = pid;
for(j = 0; j < 3; j++)
{
@ -486,7 +485,7 @@ static void spawn_child(char **argv)
static void clean_children(void)
{
time_t now = time(NULL);
int64_t now = _zz_time();
int i, j;
/* Terminate children if necessary */
@ -503,8 +502,8 @@ static void clean_children(void)
}
if(child_list[i].status == STATUS_RUNNING
&& maxtime >= 0.0
&& difftime(now, child_list[i].date) > maxtime)
&& maxtime >= 0
&& now > child_list[i].date + maxtime)
{
fprintf(stdout, "zzuf[seed=%i]: time exceeded, sending SIGTERM\n",
child_list[i].seed);
@ -514,11 +513,11 @@ static void clean_children(void)
}
}
/* Kill children if necessary */
/* Kill children if necessary (still there after 2 seconds) */
for(i = 0; i < maxforks; i++)
{
if(child_list[i].status == STATUS_SIGTERM
&& difftime(now, child_list[i].date) > 2.0)
&& now > child_list[i].date + 2000000)
{
fprintf(stdout, "zzuf[seed=%i]: not responding, sending SIGKILL\n",
child_list[i].seed);