aboutsummaryrefslogtreecommitdiffstats
path: root/syz-verifier
diff options
context:
space:
mode:
authortarasmadan <89859571+tarasmadan@users.noreply.github.com>2021-10-07 17:05:22 +0200
committerGitHub <noreply@github.com>2021-10-07 17:05:22 +0200
commitefe0f24dd913d90b2c6a2dbe7b8dac779c266144 (patch)
tree84f5be6be0effb264a81cff2946628fca362c5b8 /syz-verifier
parent620352409e47ec27a68a97e08b5786e27035ce31 (diff)
syz-verifier: fix qemu vm leakage (#2804)
fix the VM resource leakage some refactoring
Diffstat (limited to 'syz-verifier')
-rwxr-xr-xsyz-verifier/main.go62
1 files changed, 35 insertions, 27 deletions
diff --git a/syz-verifier/main.go b/syz-verifier/main.go
index c429fc5a3..f53ea48ce 100755
--- a/syz-verifier/main.go
+++ b/syz-verifier/main.go
@@ -242,33 +242,10 @@ func main() {
func (vrf *Verifier) startInstances() {
for idx, pi := range vrf.pools {
go func(pi *poolInfo, idx int) {
- for { // TODO: implement support for multiple VMs per Pool.
- inst, err := pi.pool.Create(0)
- if err != nil {
- log.Fatalf("failed to create instance: %v", err)
- }
- fwdAddr, err := inst.Forward(vrf.srv.port)
- if err != nil {
- log.Fatalf("failed to set up port forwarding: %v", err)
- }
-
- runnerBin, err := inst.Copy(vrf.runnerBin)
- if err != nil {
- log.Fatalf(" failed to copy runner binary: %v", err)
- }
- _, err = inst.Copy(vrf.executorBin)
- if err != nil {
- log.Fatalf("failed to copy executor binary: %v", err)
- }
-
- cmd := instance.RunnerCmd(runnerBin, fwdAddr, vrf.target.OS, vrf.target.Arch, idx, 0, false, false, vrf.newEnv)
- outc, errc, err := inst.Run(pi.cfg.Timeouts.VMRunningTime, vrf.vmStop, cmd)
- if err != nil {
- log.Fatalf("failed to start runner: %v", err)
- }
-
- inst.MonitorExecution(outc, errc, pi.Reporter, vm.ExitTimeout)
- vrf.srv.cleanup(idx, 0)
+ for {
+ // TODO: implement support for multiple VMs per Pool.
+
+ vrf.createAndManageInstance(pi, idx)
}
}(pi, idx)
}
@@ -276,6 +253,37 @@ func (vrf *Verifier) startInstances() {
select {}
}
+func (vrf *Verifier) createAndManageInstance(pi *poolInfo, idx int) {
+ inst, err := pi.pool.Create(0)
+ if err != nil {
+ log.Fatalf("failed to create instance: %v", err)
+ }
+ defer inst.Close()
+ defer vrf.srv.cleanup(idx, 0)
+
+ fwdAddr, err := inst.Forward(vrf.srv.port)
+ if err != nil {
+ log.Fatalf("failed to set up port forwarding: %v", err)
+ }
+
+ runnerBin, err := inst.Copy(vrf.runnerBin)
+ if err != nil {
+ log.Fatalf(" failed to copy runner binary: %v", err)
+ }
+ _, err = inst.Copy(vrf.executorBin)
+ if err != nil {
+ log.Fatalf("failed to copy executor binary: %v", err)
+ }
+
+ cmd := instance.RunnerCmd(runnerBin, fwdAddr, vrf.target.OS, vrf.target.Arch, idx, 0, false, false, vrf.newEnv)
+ outc, errc, err := inst.Run(pi.cfg.Timeouts.VMRunningTime, vrf.vmStop, cmd)
+ if err != nil {
+ log.Fatalf("failed to start runner: %v", err)
+ }
+
+ inst.MonitorExecution(outc, errc, pi.Reporter, vm.ExitTimeout)
+}
+
func startRPCServer(vrf *Verifier) (*RPCServer, error) {
srv := &RPCServer{
vrf: vrf,