diff options
| author | tarasmadan <89859571+tarasmadan@users.noreply.github.com> | 2021-10-07 17:05:22 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-07 17:05:22 +0200 |
| commit | efe0f24dd913d90b2c6a2dbe7b8dac779c266144 (patch) | |
| tree | 84f5be6be0effb264a81cff2946628fca362c5b8 /syz-verifier | |
| parent | 620352409e47ec27a68a97e08b5786e27035ce31 (diff) | |
syz-verifier: fix qemu vm leakage (#2804)
fix the VM resource leakage
some refactoring
Diffstat (limited to 'syz-verifier')
| -rwxr-xr-x | syz-verifier/main.go | 62 |
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, |
