Ignore:
Timestamp:
Jan 10, 2007, 6:17:26 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Implemented memory limits. Probably breaks on other arches because of all the new functions.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/zzuf.c

    r1640 r1641  
    3737#include <time.h>
    3838#include <sys/wait.h>
     39#include <sys/time.h>
     40#include <sys/resource.h>
    3941
    4042#include "libzzuf.h"
     
    8183static int md5 = 0;
    8284static int checkexit = 0;
     85static int maxmem = -1;
    8386static double maxtime = -1.0;
    8487
     
    120123            { "include",     1, NULL, 'I' },
    121124            { "md5",         0, NULL, 'm' },
     125            { "max-memory",  1, NULL, 'M' },
    122126            { "network",     0, NULL, 'n' },
    123127            { "protect",     1, NULL, 'P' },
     
    132136            { "version",     0, NULL, 'v' },
    133137        };
    134         int c = getopt_long(argc, argv, "B:cC:dE:F:iI:mnP:qr:R:s:ST:xhv",
     138        int c = getopt_long(argc, argv, "B:cC:dE:F:iI:mM:nP:qr:R:s:ST:xhv",
    135139                            long_options, &option_index);
    136140#   else
    137141#       define MOREINFO "Try `%s -h' for more information.\n"
    138         int c = getopt(argc, argv, "B:cC:dE:F:iI:mnP:qr:R:s:ST:xhv");
     142        int c = getopt(argc, argv, "B:cC:dE:F:iI:mM:nP:qr:R:s:ST:xhv");
    139143#   endif
    140144        if(c == -1)
     
    181185        case 'm': /* --md5 */
    182186            md5 = 1;
     187            break;
     188        case 'M': /* --max-memory */
     189            setenv("ZZUF_MEMORY", "1", 1);
     190            maxmem = atoi(optarg);
    183191            break;
    184192        case 'n': /* --network */
     
    425433        case 0:
    426434            /* We’re the child */
     435            if(maxmem >= 0)
     436            {
     437                struct rlimit rlim;
     438                rlim.rlim_cur = maxmem * 1000000;
     439                rlim.rlim_max = maxmem * 1000000;
     440                setrlimit(RLIMIT_AS, &rlim);
     441            }
     442
    427443            for(j = 0; j < 3; j++)
    428444            {
     
    529545        else if(WIFSIGNALED(status))
    530546        {
    531             fprintf(stdout, "zzuf[seed=%i]: signal %i\n",
    532                     child_list[i].seed, WTERMSIG(status));
     547            fprintf(stdout, "zzuf[seed=%i]: signal %i%s\n",
     548                    child_list[i].seed, WTERMSIG(status),
     549                      (WTERMSIG(status) == SIGKILL && maxmem >= 0) ?
     550                      " (memory exceeded?)" : "");
    533551            crashes++;
    534552        }
     
    667685    printf("Usage: zzuf [-cdimnqSx] [-r ratio] [-s seed | -s start:stop]\n");
    668686    printf("                        [-F forks] [-C crashes] [-B bytes] [-T seconds]\n");
    669     printf("                        [-P protect] [-R refuse]\n");
     687    printf("                        [-M bytes] [-P protect] [-R refuse]\n");
    670688    printf("                        [-I include] [-E exclude] [PROGRAM [ARGS]...]\n");
    671689#   ifdef HAVE_GETOPT_LONG
     
    689707    printf("  -I, --include <regex>    only fuzz files matching <regex>\n");
    690708    printf("  -m, --md5                compute the output's MD5 hash\n");
     709    printf("  -M, --max-memory <n>     maximum child virtual memory size in MB\n");
    691710    printf("  -n, --network            fuzz network input\n");
    692711    printf("  -P, --protect <list>     protect bytes and characters in <list>\n");
     
    711730    printf("  -I <regex>       only fuzz files matching <regex>\n");
    712731    printf("  -m               compute the output's MD5 hash\n");
     732    printf("  -M               maximum child virtual memory size in MB\n");
    713733    printf("  -n               fuzz network input\n");
    714734    printf("  -P <list>        protect bytes and characters in <list>\n");
Note: See TracChangeset for help on using the changeset viewer.