| Commit message (Collapse) | Author | Age | Files | Lines | |
|---|---|---|---|---|---|
| * | sys: use consistent icmp socket syscall names | Andrey Konovalov | 2017-06-14 | 1 | -36/+30 |
| | | |||||
| * | executor: handle EACCES errno when opening /dev/kvm in test | Dmitry Vyukov | 2017-06-14 | 1 | -1/+1 |
| | | |||||
| * | executor: fix compiler warnings in test | Dmitry Vyukov | 2017-06-14 | 1 | -21/+24 |
| | | |||||
| * | executor: fix csum test | Dmitry Vyukov | 2017-06-14 | 1 | -1/+1 |
| | | |||||
| * | makefile: list generated packages | Andrey Konovalov | 2017-06-14 | 1 | -1/+1 |
| | | |||||
| * | executor: fix clang-tidy warnings | Dmitry Vyukov | 2017-06-13 | 2 | -18/+18 |
| | | | | | | A single check is enabled for now (misc-definitions-in-headers). But it's always fixable and found 2 bugs in csource. | ||||
| * | sys: check in generated files | Dmitry Vyukov | 2017-06-13 | 1 | -0/+4542 |
| | | | | | | | | | | | | | | | | | | | We used to have all generated files checked in. Later we removed them (now users are supposed to run make to generate them). This causes several problems: - go get does not work as it tries to build everything straight away (go get -d works, but users are confused) - users don't run make and complain that build is broken - users don't re-run make after updates and complain that build is broken - hard to integrate into other build system (even if they support building Go, they don't support running sysgen out-of-the-box) Fixes #216 | ||||
| * | Merge pull request #223 from xairy/up-makedev-fix | Andrey Konovalov | 2017-06-13 | 1 | -0/+1 |
| |\ | | | | | executor: add sys/sysmacros.h include for makedev in newer gcc | ||||
| | * | executor: add sys/sysmacros.h include for makedev in newer gcc | Andrey Konovalov | 2017-06-13 | 1 | -0/+1 |
| | | | |||||
| * | | executor: reformat | Dmitry Vyukov | 2017-06-13 | 1 | -1/+1 |
| |/ | |||||
| * | csource: don't use guard macros for debug() and NONFAILING() | Andrey Konovalov | 2017-06-12 | 2 | -109/+69 |
| | | |||||
| * | repro: always minimize over EnableTun | Andrey Konovalov | 2017-06-12 | 1 | -1/+1 |
| | | |||||
| * | csource: generate includes when necessary | Andrey Konovalov | 2017-06-12 | 1 | -25/+102 |
| | | |||||
| * | csource: don't generate execute_syscall calls | Andrey Konovalov | 2017-06-12 | 1 | -0/+2 |
| | | |||||
| * | csource: use tmp dir in repeat loop when tmpdir flag is on | Andrey Konovalov | 2017-06-12 | 1 | -1/+9 |
| | | |||||
| * | csource: only emit fail(), exitf() and doexit() when necessary | Andrey Konovalov | 2017-06-12 | 1 | -1/+15 |
| | | |||||
| * | csourse: don't generate debug printfs | Andrey Konovalov | 2017-06-12 | 1 | -2/+32 |
| | | |||||
| * | csource: try to simplify repeat loop | Andrey Konovalov | 2017-06-12 | 1 | -3/+10 |
| | | |||||
| * | csource: use sandbox only when required | Andrey Konovalov | 2017-06-12 | 1 | -0/+2 |
| | | |||||
| * | csource: emit bitmasks only when required | Andrey Konovalov | 2017-06-12 | 1 | -14/+16 |
| | | |||||
| * | csource: force enable tun flag when required | Andrey Konovalov | 2017-06-12 | 1 | -10/+2 |
| | | |||||
| * | csource: only handle SIGSEGV when necessary | Andrey Konovalov | 2017-06-12 | 2 | -9/+29 |
| | | |||||
| * | executor: don't define SYZ_ENABLE_TUN in executor | Andrey Konovalov | 2017-06-12 | 2 | -17/+16 |
| | | |||||
| * | csource: use tmp dir only when necessary | Andrey Konovalov | 2017-06-12 | 1 | -0/+2 |
| | | |||||
| * | executor: split setup_main_process into smaller functions | Andrey Konovalov | 2017-06-12 | 2 | -23/+23 |
| | | |||||
| * | csource: add EnableTun option | Andrey Konovalov | 2017-06-12 | 2 | -31/+36 |
| | | |||||
| * | executor: call flush_tun for repeat repros | Andrey Konovalov | 2017-06-12 | 1 | -7/+12 |
| | | |||||
| * | executor: move inet checksum code under ifdef | Andrey Konovalov | 2017-06-12 | 1 | -30/+32 |
| | | |||||
| * | executor: limit stack frame size | Dmitry Vyukov | 2017-05-31 | 1 | -1/+3 |
| | | | | | | | | | | Stack usage warning currently breaks our internal build (with 16K frame limit). Executor uses stacks of limited size, that's another reason to not allow frames of arbitrary size. Limit stack frame size to 8K. Reduce tun packet size. We don't need to read out whole packet. | ||||
| * | all: cleanup executor/ipc status checking | Michael Pratt | 2017-05-30 | 1 | -1/+2 |
| | | | | | | | | | | | This is mostly a cleanup change with little functional change. In ipc.command.exec, remove the status fallback from the pipe to the exit status. Once the executor is serving, it always writes the status over the pipe; anything else is an error. Remove the panic check in syz-stress, which is no longer needed. | ||||
| * | csource: reproduce crashes with fault injection | Dmitry Vyukov | 2017-05-26 | 2 | -15/+27 |
| | | |||||
| * | all: add fault injection capability | Dmitry Vyukov | 2017-05-26 | 1 | -7/+48 |
| | | | | | | | | Systematically inject faults during smashing. Requires kernel patch: "fault-inject: support systematic fault injection" (currently in linux-next). | ||||
| * | sys, executor: extract tcp sequence numbers from /dev/net/tun | Andrey Konovalov | 2017-05-26 | 2 | -11/+146 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds a new pseudo syscall syz_extract_tcp_res, that reads a packet from /dev/net/tun and extracts tcp sequence numbers to be used in subsequent packets. As a result this syzkaller program: mmap(&(0x7f0000000000/0x10000)=nil, (0x10000), 0x3, 0x32, 0xffffffffffffffff, 0x0) r0 = socket$inet_tcp(0x2, 0x1, 0x0) bind$inet(r0, &(0x7f0000001000)={0x2, 0x0, @empty=0x0, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]}, 0x10) listen(r0, 0x5) syz_emit_ethernet(0x36, &(0x7f0000002000)={@local={[0xaa, 0xaa, 0xaa, 0xaa, 0xaa], 0x0}, @random="4c6112cc15d8", [], {{0x800, @ipv4={{0x5, 0x4, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0, 0x6, 0x0, @remote={0xac, 0x14, 0x0, 0xbb}, @local={0xac, 0x14, 0x0, 0xaa}, {[]}}, @tcp={{0x1, 0x0, 0x42424242, 0x42424242, 0x0, 0x0, 0x5, 0x2, 0x0, 0x0, 0x0, {[]}}, {""}}}}}}) syz_extract_tcp_res(&(0x7f0000003000)={<r1=>0x42424242, <r2=>0x42424242}, 0x1, 0x0) syz_emit_ethernet(0x38, &(0x7f0000004000)={@local={[0xaa, 0xaa, 0xaa, 0xaa, 0xaa], 0x0}, @remote={[0xbb, 0xbb, 0xbb, 0xbb, 0xbb], 0x0}, [], {{0x800, @ipv4={{0x5, 0x4, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x0, 0x6, 0x0, @remote={0xac, 0x14, 0x0, 0xbb}, @local={0xac, 0x14, 0x0, 0xaa}, {[]}}, @tcp={{0x1, 0x0, r2, r1, 0x0, 0x0, 0x5, 0x10, 0x0, 0x0, 0x0, {[]}}, {"0c10"}}}}}}) r3 = accept$inet(r0, &(0x7f0000005000)={0x0, 0x0, @multicast1=0x0, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]}, &(0x7f0000006000)=0x10) established a TCP connection: Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:20000 0.0.0.0:* LISTEN 5477/a.out tcp 2 0 172.20.0.170:20000 172.20.0.187:20001 ESTABLISHED 5477/a.out Similar program for IPv6: mmap(&(0x7f0000000000/0x10000)=nil, (0x10000), 0x3, 0x32, 0xffffffffffffffff, 0x0) r0 = socket$inet6_tcp(0xa, 0x1, 0x0) bind$inet6(r0, &(0x7f0000000000)={0xa, 0x1, 0x0, @empty={[0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]}, 0x0}, 0x1c) listen(r0, 0x5) syz_emit_ethernet(0x4a, &(0x7f0000001000)={@local={[0xaa, 0xaa, 0xaa, 0xaa, 0xaa], 0x0}, @random="de895db1468d", [], {{0x86dd, @ipv6={0x0, 0x6, "a228af", 0x14, 0x6, 0x0, @remote={0xfe, 0x80, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], 0x0, 0xbb}, @local={0xfe, 0x80, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], 0x0, 0xaa}, {[], @tcp={{0x0, 0x1, 0x42424242, 0x42424242, 0x0, 0x0, 0x5, 0x2, 0x0, 0x0, 0x0, {[]}}, {""}}}}}}}) syz_extract_tcp_res(&(0x7f0000002000)={<r1=>0x42424242, <r2=>0x42424242}, 0x1, 0x0) syz_emit_ethernet(0x4a, &(0x7f0000003000)={@local={[0xaa, 0xaa, 0xaa, 0xaa, 0xaa], 0x0}, @random="de895db1468d", [], {{0x86dd, @ipv6={0x0, 0x6, "a228af", 0x14, 0x6, 0x0, @remote={0xfe, 0x80, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], 0x0, 0xbb}, @local={0xfe, 0x80, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], 0x0, 0xaa}, {[], @tcp={{0x0, 0x1, r2, r1, 0x0, 0x0, 0x5, 0x10, 0x0, 0x0, 0x0, {[]}}, {""}}}}}}}) r3 = accept$inet6(r0, &(0x7f0000004000)={0x0, 0x0, 0x0, @empty={[0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]}, 0x0}, &(0x7f0000005000)=0x1c) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp6 0 0 :::20001 :::* LISTEN 5527/a.out tcp6 0 0 fe80::aa:20001 fe80::bb:20000 ESTABLISHED 5527/a.out | ||||
| * | executor: increase syscall timeout in debug mode | Dmitry Vyukov | 2017-05-23 | 1 | -1/+2 |
| | | | | | | Debug output takes time, so 20ms is not enough for almost any syscall. Give a syscall 500ms in debug before considering it blocked. | ||||
| * | executor: mount /proc in namespace | Dmitry Vyukov | 2017-05-23 | 1 | -0/+9 |
| | | | | | | | /proc is useful for fault injection and there is probably some interesting stuff to fuzz as well. | ||||
| * | prog, executor: move checksum computation to executor | Andrey Konovalov | 2017-05-12 | 5 | -9/+277 |
| | | | | | | This commit moves checksum computation to executor. This will allow to embed dynamically generated values (like TCP sequence numbers) into packets. | ||||
| * | executor: rename test_kvm.cc to test_executor.cc | Andrey Konovalov | 2017-05-10 | 1 | -0/+0 |
| | | |||||
| * | executor: bump per-call timeout | Dmitry Vyukov | 2017-04-25 | 1 | -1/+1 |
| | | | | | | | | | | | We've started seeing lots of vmalloc failures with the 200ms timeout. Turns out vmalloc has a check for fatal signals pending, so we were killing the process which caused vmalloc to fail. If vmalloc can take 200+ms, then we need to dump the timeout as it's not blocking that we want to catch. Bump the timeout to 500ms. | ||||
| * | vm: add Odroid support | Andrey Konovalov | 2017-03-10 | 1 | -1/+1 |
| | | | | | | | | | | | | This commit adds Odroid C2 support to syzkaller. It's now possible to specify "type": "odroid" in manager config. Documentation on how to setup fuzzing with Odroid C2 board is here: https://github.com/google/syzkaller/wiki/Setup:-Odroid-C2 Note, that after this change libusb-1.0-0-dev package should be installed to build syzkaller. | ||||
| * | executor: fix ppc64le build | Dmitry Vyukov | 2017-03-02 | 1 | -0/+5 |
| | | |||||
| * | executor: support wrapping executor with an external sandbox process | Dmitry Vyukov | 2017-02-27 | 1 | -0/+10 |
| | | | | | | | | | If an external sandbox process wraps executor, the out pipe will be closed before the sandbox process exits this will make ipc package kill the sandbox. As the result sandbox process will exit with exit status 9 instead of the executor exit status (notably kRetryStatus). Consequently, ipc will treat it as hard failure rather than a temporal failure. So we duplicate the exit status on the pipe. | ||||
| * | executor: treat KCOV_ENABLE failure as transient | Dmitry Vyukov | 2017-02-15 | 1 | -2/+6 |
| | | | | | It fails with various errors (9, 14, 25), probably fuzzer messes with the fd. | ||||
| * | executor: treat EAGAIN as transient failure as ENOMEM | Dmitry Vyukov | 2017-02-15 | 1 | -2/+2 |
| | | |||||
| * | executor: increase kMaxCommands and add checks | Andrey Konovalov | 2017-02-08 | 1 | -1/+5 |
| | | |||||
| * | executor: better protect output region from corruptions | Dmitry Vyukov | 2017-02-06 | 1 | -9/+18 |
| | | | | | | Fuzzer invented another tricky way to corrupt the region. Map it at a hard to guess address. | ||||
| * | executor: fix undefined setup_tun() function error in c repros | Andrey Konovalov | 2017-02-01 | 1 | -2/+6 |
| | | |||||
| * | csource: regenerate and reformat | Dmitry Vyukov | 2017-02-01 | 1 | -1/+1 |
| | | |||||
| * | executor: fix tun initialization when sandbox != none | Andrey Konovalov | 2017-01-31 | 2 | -18/+32 |
| | | |||||
| * | sys: improve kvm description | Dmitry Vyukov | 2017-01-28 | 4 | -67/+120 |
| | | | | | | | Allow fuzzer to change types of segment descriptors. Alter more flags. Allow fuzzer to do a random vmwrite. | ||||
| * | all: implement edge coverage | Dmitry Vyukov | 2017-01-27 | 1 | -47/+122 |
| | | | | | | | | | | | | Currently syzkaller uses per-call basic block (BB) coverage. This change implements edge (not-per-call) coverage. Edge coverage is more detailed than BB coverage as it captures not-taken branches, looping, etc. So it provides better feedback signal. This coverage is now called "signal" throughout the code. BB code coverage is also collected as it is required for visualisation. Not doing per-call coverage reduces corpus ~6-7x (from ~35K to ~5K), this has profound effect on fuzzing efficiency. | ||||
