aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/instance
Commit message (Collapse)AuthorAgeFilesLines
* pkg/aflow/action/crash: collect test coverageDmitry Vyukov3 days3-46/+105
| | | | | | | Collect code coverage for test programs. This is likley to be needed for #6878 and seed generation workflow. For now it's not wired into any workflow/tool and is not tested. But this should provide most of the plumbing to wire it up.
* pkg/instance: export test result aggregation functionalityAleksandr Nogikh2026-02-202-0/+169
| | | | | | This will prevent duplication of the same logic later. Specifically, it will be needed when rerunning reproducers in syz-cluster and potentially when aggregating the results of multiple reproducer runs in syz-agent.
* pkg/manager: display core dumps on the syz-manager web uiAleksandr Nogikh2026-02-171-1/+0
|
* pkg/instance: extract crash dumpsAleksandr Nogikh2026-02-171-0/+86
| | | | | | | | | If the crash dumps are enabled, collect one crash dump per each crash when fuzzing locally. Optionally also collect crash dumps in pkg/instance's Test(). Inspired by Chenxi Huang's downstream changes to syzkaller.
* pkg/instance: fix 386 repros/jobsDmitry Vyukov2025-12-291-3/+2
| | | | | | | | | | | | All repros and jobs that use syz rerpos are broken for linux/amd64/386 since Mar 2022 with: SYZFAIL: failed to recv rpc aborting RPC server: mismatching manager/executor arches: amd64 vs 386 The problem is that ExecProgInstance.RunSyzProgFile passes sysTarget.Arch (which is VMArch) to syz-execprog, so it expects executor to be amd64. Restore the orignal logic.
* all: use any instead of interface{}Dmitry Vyukov2025-12-222-4/+4
| | | | Any is the preferred over interface{} now in Go.
* pkg/instance: improve comment about returned errorsDmitry Vyukov2025-12-181-2/+2
| | | | | We return pointers rather than structs directly, this is important if the errors are casted.
* pkg/osutil: move Semaphore from pkg/instanceDmitry Vyukov2025-11-241-37/+3
| | | | | | | | Semaphore is a very low-level primitive type, while pkg/instance is a very high-level package with lots of deps. Semaphore does not belong there, and may lead to cyclic deps if we use it more. Move it to pkg/osutil. It's not really OS-specific, but we don't have a better package.
* pkg/osutil: make VerboseError nest other errorsAleksandr Nogikh2025-10-011-1/+1
| | | | | After this change it fits more naturally into the Go's error functionality.
* vm: add context to Pool.Create()Aleksandr Nogikh2025-10-012-2/+3
| | | | | | | | | | Enable external abortion of the instance creation process. This is especially useful for the qemu case where we retry the creation/boot up to 1000 times, which can take significant time (e.g. it timeouts syz-cluster pods on unstable kernels). The context can be further propagated to WaitForSSH, but that requires another quite significant vm/ refactoring.
* pkg/instance: fix error extraction during smoke testAleksandr Nogikh2025-09-231-1/+1
| | | | | The err variable is from the open call, it cannot be VerboseError. Use retErr instead.
* vm: extract all the crashes from the logTaras Madan2025-08-281-1/+5
|
* pkg/instance: extend image testing failed errorsAleksandr Nogikh2025-08-261-0/+6
| | | | | | | | Include a bit more info into the bug reports. The change is motivated by inactionable "image testing failed w/o kernel bug" errors like this: https://syzkaller.appspot.com/text?tag=CrashLog&x=17acec42580000
* pkg/instance: fix sandbox_arg passingAleksandr Nogikh2025-08-202-1/+5
| | | | We used the wrong name for the optional argument.
* vm: refactoringTaras Madan2025-08-071-3/+6
| | | | | 1. func Run optionally accepts the opts. 2. Some refactoring, more comments.
* pkg/instance: patch empty Sandbox for all syz-execprog callsAleksandr Nogikh2025-07-011-7/+7
| | | | | | | | | | Since #6123, the ability to run syz reproducers with Sandbox="" is also relevant for pkg/repro. Instead of patching the value at Env.Test(), do it right before the syz-execprog's invocation. Closes #6137.
* vm: func Run accepts contextTaras Madan2025-05-191-1/+4
| | | | It allows to use context as a single termination signal source.
* all: opt-out some functions to enforce linter checksTaras Madan2025-03-271-0/+2
| | | | New code will be limited to max 7 function params.
* all: delete dead codeTaras Madan2025-02-101-4/+0
| | | | | go install golang.org/x/tools/cmd/deadcode@latest deadcode -test ./...
* pkg/instance: extract the smoke test methodAleksandr Nogikh2025-01-211-0/+39
| | | | | | | Move the logic from syz-ci to pkg/instance to make it reusable. In case of a failure without a crash report, report the issue as a SYZFATAL crash instead of just printing to the error log.
* all: use min/max functionsDmitry Vyukov2025-01-171-3/+1
| | | | They are shorter, more readable, and don't require temp vars.
* all: add support for binaries shipped with targetStefan Wiehler2024-12-171-4/+8
| | | | | | | | | | | In some build environments (notably Yocto), syzkaller host and target binaries end up in separate packages for each built architecture, which are then shipped with the respective image/SDK. Add the "Execprog/ExecutorBinOnTarget" and "StraceBinOnTarget" options to the manager config, which when set expects the respective binaries to be shipped with the target image and does not attempt to copy them from the host.
* pkg/repro: accept a cancellable contextAleksandr Nogikh2024-11-132-12/+35
| | | | | | | | | | Refactor pkg/repro to accept a context.Context object. This will make it look more similar to other package interfaces and will eventually let us abort currently running repro jobs without having to shut down the whole application. Simplify the code by factoring out the parameters common both to RunSyzRepro() and RunCRepro().
* pkg/build: use the build environment in clean() callsFlorent Revest2024-10-141-11/+24
| | | | | | This unifies the build() and clean() interfaces such that if a custom compiler or make binary is provided in the manager or bisection config, they can be taken into account by the clean() interface.
* pkg/build/linux: support building with a custom make binaryFlorent Revest2024-10-141-0/+2
| | | | | | Certain environments might need a specific make command or wrap make calls with extra logic. This lets users provide a path to a custom make binary.
* pkg/instance: refactor ExecprogCmdAleksandr Nogikh2024-09-253-19/+23
| | | | Reduce the number of arguments by using a csource.Option value directly.
* tools/syz-execprog: pass the VM type to execprogLaura Peskin2024-09-243-5/+9
| | | | | | This makes it possible to skip certain machine checks depending on the VM type, as syz-manager already does.
* vm: make sure vm.Pools are cleaned upCameron Finucane2024-09-191-0/+1
| | | | Add calls to Close() from all locations that call Create().
* pkg/repro: don't exaggerate timeoutsAleksandr Nogikh2024-08-271-4/+10
| | | | | | | Our largest timeout is 6 minutes, so anything between 1.5 minutes and 6 ended up having a 9 minute timeout. That's too much. Consider the time it actually took to crash the kernel.
* all: rename build_jobs to build_cpusAleksandr Nogikh2024-08-221-2/+2
| | | | The latter is a better suitable name.
* syz-ci: accept a BuildJobs parameterAleksandr Nogikh2024-08-221-0/+2
| | | | | The parameter defines the maximum number of CPUs involved in the kernel build process.
* pkg/instance: adjust FuzzingVMs in OverrideVMCount()Aleksandr Nogikh2024-08-141-0/+1
| | | | | We should not be setting FuzzingVMs to a value below the overall VM count.
* executor: add runner modeDmitry Vyukov2024-06-241-48/+1
| | | | | | | Move all syz-fuzzer logic into syz-executor and remove syz-fuzzer. Also restore syz-runtest functionality in the manager. Update #4917 (sets most signal handlers to SIG_IGN)
* pkg/instance: don't require a syz reproducerAleksandr Nogikh2024-06-181-4/+4
| | | | | | | | We currently panic if the syz reproducer was not provided, but it's actually a valid situation - it happens if we perform patch testing for build/boot/test errors. Closes #4907.
* pkg/flatrpc: send parameters to the fuzzer in RPCDmitry Vyukov2024-06-051-3/+2
| | | | | When we rewrite syz-fuzzer in C++ flag parsing will be painful, so send as many parameters to syz-fuzzer in RPC rather than as flags.
* syz-fuzzer: remove testing modeDmitry Vyukov2024-05-271-5/+7
| | | | It's not used anymore.
* pkg/instance: use execprog to do basic instance testingDmitry Vyukov2024-05-273-146/+49
| | | | | | | | | | | When we accept new kernels for fuzzing we need more extensive testing, but syz-ci switched to using syz-manager for this purpose. Now instance testing is used only for bisection and patch testing, which does not need such extensive image testing (it may even harm). So just run a simple program as a testing. It also uses the same features as the target reproducer, so e.g. if the reproducer does not use wifi, we won't test it, which reduces changes of unrelated kernel bugs.
* pkg/instance: always use default exit conditionsAleksandr Nogikh2024-05-231-8/+12
| | | | | | | We don't really need to overwrite it. For syz programs, don't ignore non-zero exit codes. This should enable syzkaller to find reproducers for "lost connection" bugs.
* pkg/ipc: remove ExecOptsDmitry Vyukov2024-05-211-2/+2
| | | | Switch to flatrpc.ExecOpts.
* pkg/rpctype: prepare for not using for target communicationDmitry Vyukov2024-05-031-5/+3
| | | | | | Remove things that are only needed for target VM communication: conditional compression, timeout scaling, traffic stats. To minimize diffs when we switch target VM communication to flatrpc.
* tools/syz-runtest: switch to the generic program executionDmitry Vyukov2024-05-031-10/+3
| | | | | | | | | syz-runtest effectively implemented the same execute program/return result mechanism we use now for normal fuzzing. So extend the general mechanism to allow collecting output/errors, repeating program, and executing a precompiled binary as a test. And switch syz-runtest to the general mechanism. This removes another chunk of code from syz-fuzzer.
* syz-manager, syz-fuzzer: pass ExecOpts in exec requestsDmitry Vyukov2024-04-301-2/+0
| | | | | | Move all ExecOpts logic from the fuzzer to the manager. This makes the fuzzer simpler and will allow to vary options across requests.
* vm: combine Run and MonitorExecutionDmitry Vyukov2024-04-112-16/+15
| | | | | | All callers of Run always call MonitorExecution right after it. Combine these 2 methods. This allows to hide some implementation details and simplify users of vm package.
* pkg/rpctype: make RPC compression optionalDmitry Vyukov2024-04-031-5/+7
| | | | | | | | RPC compression take up to 10% of CPU time in profiles, but it's unlikely to be beneficial for local VM runs (we are mostly copying memory in this case). Enable RPC compression based on the VM type (local VM don't use it, remove machines use it).
* all: experiment with an option to reset accumulated stateAleksandr Nogikh2024-01-231-4/+6
| | | | | | | | | | | | | | | | | In the cases where we do not / cannot sandbox individual prog executions well enough, some share of progs end up being dependent on the previously accumulated state of the whole VM. As the result, * We lose 5-10% of coverage/signal on every instance restart. * A share of our corpus programs do not actually trigger the coverage they were thought to reliably trigger. This significantly affects fuzzing efficiency and prevents syzkaller from accumulating bigger and better corpus over multiple runs. Let's see if the situation becomes better if we restart syz-executor before most of prog executions.
* all: refactor pprof endpoint configurationAleksandr Nogikh2024-01-221-0/+2
| | | | | | | | | | | | | In some cases (e.g. gVisor instances using host's network namespace) attempts to bind() all syz-fuzzer processes to the same port result in conflicts and fuzzing breakages. Refactor the code to enable custom pprof configuration depending on the vm type. For now, just disable pprof endpoints for gVisor VMs. Once we actually need the feature there, we can generate custom ports for every gVisor VM.
* all: use errors.As instead of .(type)Taras Madan2023-07-241-2/+5
|
* all: use special placeholder for errorsTaras Madan2023-07-242-14/+14
|
* pkg/instance: don't fail on symbolization errorAleksandr Nogikh2023-07-101-1/+1
| | | | | | | The test() code is used for reproducer generation and kernel bisections, we don't need symoblized reports there. Instead of retuning an error, just print a log message.
* pkg/report: move report.Type to pkg/report/crashAleksandr Nogikh2023-07-051-1/+2
| | | | | This will help avoid a circular dependency pkg/vcs -> pkg/report -> pkg/vcs.