summary refs log tree commit diff
path: root/pkgs/tools/security/afl/qemu.nix
blob: 441d64415cbda1acb8e512fc1fa813b6996fd916 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
{ stdenv, fetchurl, python, zlib, pkgconfig, glib, ncurses, perl
, attr, libcap, vde2, alsaLib, texinfo, libuuid, flex, bison, lzo, snappy
, libaio, libcap_ng, gnutls, pixman, autoconf
, writeText
}:

with stdenv.lib;

let
  n = "qemu-2.2.0";

  aflHeaderFile = writeText "afl-qemu-cpu-inl.h"
    (builtins.readFile ./qemu-patches/afl-qemu-cpu-inl.h);
  aflConfigFile = writeText "afl-config.h"
    (builtins.readFile ./qemu-patches/afl-config.h);
  aflTypesFile = writeText "afl-types.h"
    (builtins.readFile ./qemu-patches/afl-types.h);

  cpuTarget = if stdenv.system == "x86_64-linux" then "x86_64-linux-user"
    else if stdenv.system == "i686-linux" then "i386-linux-user"
    else throw "afl: no support for ${stdenv.system}!";
in
stdenv.mkDerivation rec {
  name = "afl-${n}";

  src = fetchurl {
    url = "http://wiki.qemu.org/download/${n}.tar.bz2";
    sha256 = "1703c3scl5n07gmpilg7g2xzyxnr7jczxgx6nn4m8kv9gin9p35n";
  };

  buildInputs =
    [ python zlib pkgconfig glib pixman ncurses perl attr libcap
      vde2 texinfo libuuid flex bison lzo snappy autoconf
      libcap_ng gnutls
    ]
    ++ optionals (hasSuffix "linux" stdenv.system) [ libaio ];

  enableParallelBuilding = true;

  patches =
    [ ./qemu-patches/elfload.patch
      ./qemu-patches/cpu-exec.patch
      ./qemu-patches/no-etc-install.patch
      ./qemu-patches/translate-all.patch
      ./qemu-patches/syscall.patch
    ];

  preConfigure = ''
    cp ${aflTypesFile}  afl-types.h
    cp ${aflConfigFile} afl-config.h
    cp ${aflHeaderFile} afl-qemu-cpu-inl.h
  '';

  configureFlags =
    [ "--disable-system"
      "--enable-linux-user"
      "--enable-guest-base"
      "--disable-gtk"
      "--disable-sdl"
      "--disable-vnc"
      "--target-list=${cpuTarget}"
      "--sysconfdir=/etc"
      "--localstatedir=/var"
    ];

  meta = with stdenv.lib; {
    homepage = http://www.qemu.org/;
    description = "Fork of QEMU with American Fuzzy Lop instrumentation support";
    license = licenses.gpl2Plus;
    maintainers = with maintainers; [ thoughtpolice ];
    platforms = platforms.linux;
  };
}