aboutsummaryrefslogtreecommitdiffstats
path: root/vm/vmimpl/vmimpl.go
Commit message (Collapse)AuthorAgeFilesLines
* 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-011-1/+1
| | | | | | | | | | 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.
* vm: func Run accepts contextTaras Madan2025-05-191-7/+5
| | | | It allows to use context as a single termination signal source.
* vm/vmimpl: explicitly indicate empty boot outputAleksandr Nogikh2025-05-051-0/+5
| | | | | | | | It will help distinguish the cases when the output was collected, but lost somewhere during the reporting pipeline, or it was empty in the first place, e.g. because qemu could not start at all. Cc #5986.
* vm: fix deadlock in UnusedTCPPortIvan Gulakov2025-01-131-0/+15
| | | | | | | | | | | | If localhost is not configured on a system, UnusedTCPPort will loop forever without producing any errors. By checking EADDRINUSE and ENOACC and then skipping only in these cases, we'd avoid at least the mentioned deadlock. On top of this, this change should catch other errors without locking, like other DNS errors and so on. Signed-off-by: Ivan Gulakov <gulakov@amazon.de>
* vm: add snapshot interfaceDmitry Vyukov2024-07-251-0/+1
|
* vm: check preemption string only for gce instancesDmitry Vyukov2024-07-231-0/+4
| | | | Fixes #5028
* vmimpl: refactor VM type registrationDmitry Vyukov2024-07-231-6/+5
| | | | | | | | | Pass Type struct directly during registration. This allows to add additional optional parameters to VM types without changing all VM implementations. We we will need to add SupportsSnapshots flag and one flag to resolve #5028. With this change it will be possible to add "SupportsSnapshots: true" to just one VM type implemenetation.
* vm/vmimpl: don't wait commands that have not failedDmitry Vyukov2024-07-111-8/+10
| | | | | | | | | The sleep in Multiplex is unconditional and it sleeps idle even for commands that has nothting to do with executor, and for executor in other modes that has nothing to do with fuzzing. Since the original reason for the sleep was related to failing executor, sleep only when the command fails. This allows to at least run successful commands fast.
* vm: make Instance implement io.CloserAleksandr Nogikh2024-07-111-1/+1
| | | | It's better to follow standard interfaces.
* vm/gce: use vmimpl.Multiplex()Aleksandr Nogikh2024-07-021-5/+17
| | | | | | It will let us reduce code duplication and use the more appropriate approach to the graceful Run() shutdown - by enforcing a delay between stopping the command and stopping the collection of the console output.
* vm: refactor vm.Multiplex argumentsAleksandr Nogikh2024-07-011-10/+21
| | | | | Introduce a MultiplexConfig structure that contains optional parameters. Include a Scale parameter to control the intended slowdown.
* vmimpl: add a delay after an error from the tracked processAleksandr Nogikh2024-07-011-0/+5
| | | | | It usually means a kernel crash, in which case we want to give the kernel some more time to print the whole coverage report to the console.
* vm/qemu: use the default vmimpl.Multiplex() functionAleksandr Nogikh2024-07-011-4/+9
|
* executor: add runner modeDmitry Vyukov2024-06-241-8/+0
| | | | | | | 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/rpctype: prepare for not using for target communicationDmitry Vyukov2024-05-031-7/+5
| | | | | | 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.
* 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: refactor pprof endpoint configurationAleksandr Nogikh2024-01-221-0/+5
| | | | | | | | | | | | | 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.
* syz-fuzzer: export pprof endpointsAleksandr Nogikh2024-01-101-0/+3
| | | | | This will let us have a better understanding of what's going on inside a fuzzed VM.
* all: use errors.As instead of .(type)Taras Madan2023-07-241-5/+4
|
* vm: separate boot time and infrastructure errorsAleksandr Nogikh2023-05-091-0/+17
| | | | | | | | | | | | | | | It's not correct to mix them since they point to fundamentally different issues: 1) Boot time errors are caused by a problematic kernel image and can only be resolved by using another kernel version or config. 2) Infrastructure errors are temporary, so we can just try again some time later. Reserve the existing BootError for (1) errors and let all other VM handling errors refer to (2). To make it possible to attach more output to the infra error, introduce the VerboseInfraError type.
* vm/starnix: add support for fuzzing starnix (#3624)juanPabloMiceli2023-01-191-10/+11
| | | | | | | This commit adds a new VM for fuzzing starnix. The VM will boot a fuchsia image using the `ffx` tool and will connect to an adb server inside it. Fuzzing will be done using HostFuzzer mode due to some features not being implemented yet in starnix. Once this is possible, fuzzing will be performed without HostFuzzer mode. Co-authored-by: Juampi Miceli <jpmiceli@google.com>
* vm/vmimpl: improve port selectionmischa2022-04-191-2/+7
| | | | | | Selecting the monitor port for qemu using an unseeded pseudo-random generator can lead to failed VM startups, as the code contains race conditions. This happens frequently if multiple instances are started with a script. Using real random ports provided by crypto/rand reduces the risk of failing VM starts.
* vm/adb: add startup_script configJoey Jiao2021-04-141-0/+41
|
* vm/qemu: provide info about qemu version/argsDmitry Vyukov2021-03-181-0/+6
|
* vm/qemu: scale ssh timeoutDmitry Vyukov2020-12-291-9/+11
| | | | Increase ssh wait timeout according to the target slowdown.
* vm: pass Report to DiagnoseDmitry Vyukov2020-11-211-6/+8
| | | | | | | | | The way to diagnose generally depends on the issue. E.g. do we need register dump to debug this issue? Do we need host dmesg dump? Some diagnosis may be directly specific to a particular problem (e.g. dumping a particular debugfs/procfs file). Pass Report to Diagnose to make this possible.
* vm/vmimpl: produce better error in WaitForSSHDmitry Vyukov2019-01-241-0/+10
| | | | | Currently we squash VerboseError which leads to too lengthy build error titles. Handle verbose error more carefully.
* vm: allow Diagnose to directly return diagnosisMichael Pratt2018-12-211-4/+7
| | | | | | Rather than writing the diagnosis to the kernel console, Diagnose can now directly return the extra debugging info, which will be appended ot the kernel console log.
* openbsd: run on gceGreg Steuck2018-11-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * build/openbsd: minor cleanup (use tuples instead of maps) * Grammar nits in comments. * Simplify openbsd.Create, will defer when there's more than one error exit. * pkg/build: Support copying kernel into GCE image * Simple test for openbsd image copy build. * Cleanup in case something failed before. * Support multi-processor VMs on GCE. * More debug * Reformat * OpenBSD gce image needs to be raw. * GC * Force format to GNU directly on Go 1.10 or newer. * Use vmType passed as a parameter inside openbsd.go * gofmt * more fmt * Can't use GENERIC.mp just yet. * capitalize * Copyright
* syz-ci: de-hardcode list of VMs that support overcommitDmitry Vyukov2018-09-111-12/+11
| | | | | | | | We currently have this list in multiple places (somewhat diverged). Specify this "overcommit" property in VM implementations. In particular, we also want to allow overcommit for "vmm" type. Update #712
* vm/vmimpl: add vm.Diagnose methodDmitry Vyukov2018-06-221-0/+5
| | | | | | Diagnose is called on machine hang to try to get some additional diagnostic information from it. For now it's all stubs.
* vm/adb: don't fail if port 35099 is busyDmitry Vyukov2018-06-111-0/+17
|
* vm/{adb,isolated}: dudup common codeDmitry Vyukov2018-05-061-0/+44
| | | | | | Found with gometalinter/dupl. Update #538
* all: fix gometalinter warningsDmitry Vyukov2018-03-081-4/+4
| | | | Fix typos, non-canonical code, remove dead code, etc.
* dashboard/app: add manager monitoringDmitry Vyukov2017-12-011-0/+4
| | | | | | | | Make it possible to monitor health and operation of all managers from dashboard. 1. Notify dashboard about internal syz-ci errors (currently we don't know when/if they happen). 2. Send statistics from managers to dashboard.
* syz-ci: test images before using themDmitry Vyukov2017-11-301-0/+10
| | | | | | | Boot and minimally test images before declaring them as good and switching to using them. If image build/boot/test fails, upload report about this to dashboard.
* vm/gce: windows supportDmitry Vyukov2017-09-271-1/+2
| | | | | | | Support custom pre-created images. Support non-root user. Use dir instead of pwd on windows. Don't use sudo on windows.
* vm/vmimpl: add target OS/arch to envDmitry Vyukov2017-09-151-0/+2
| | | | Allows future VM tuning based on target OS/arch.
* syz-manager/mgrconfig: move sshkey from vm config to manager configDmitry Vyukov2017-06-171-0/+1
| | | | | | | | | | | | | | Sshkey is a property of image, which is in manager config. Move sshkey to the same location as image. The motivation for the move is as follows. Continuous build produces an image and the key, both need to be passed manager instance. Continuous build system should not distinguish different VM types and mess with their configs. NOTE FOR USERS: this breaks manager configs again. Hopefully the last time for now. Docs are updated.
* vm: overhaulDmitry Vyukov2017-06-031-0/+77
VM infrastructure currently has several problems: - Config struct is complete mess with a superset of params for all VM types - verification of Config is mess spread across several places - there is no place where VM code could do global initialization like creating GCE connection, uploading GCE image to GCS, matching adb devices with consoles, etc - it hard to add private VM implementations such impl would need to add code to config package which would lead to constant merge conflicts - interface for VM implementation is mixed with interface for VM users this does not allow to provide best interface for both of them - there is no way to add common code for all VM implementations This change solves these problems by: - splitting VM interface for users (vm package) and VM interface for VM implementations (vmimpl pacakge), this in turn allows to add common code - adding Pool concept that allows to do global initialization and config checking at the right time - decoupling manager config from VM-specific config each VM type now defines own config Note: manager configs need to be changed after this change: VM-specific parts are moved to own "vm" subobject. Note: this change also drops "local" VM type. Its story was long unclear and there is now syz-stress which solves the same problem.