aboutsummaryrefslogtreecommitdiffstats
path: root/syz-manager/snapshot.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2024-08-07 15:09:53 +0200
committerAleksandr Nogikh <nogikh@google.com>2024-08-13 14:20:08 +0000
commitebd71c054bab8fad556745259f1d7974ed60095d (patch)
treeb3cd3ee805fd05ed1b5cd2e29b18e9a273466de9 /syz-manager/snapshot.go
parenteed4a69f8097dc228b4e11cfb84f0162ae58adb5 (diff)
syz-manager: switch snapshots to dispatcher.Pool
It lets us get bug reproductions out of box.
Diffstat (limited to 'syz-manager/snapshot.go')
-rw-r--r--syz-manager/snapshot.go33
1 files changed, 16 insertions, 17 deletions
diff --git a/syz-manager/snapshot.go b/syz-manager/snapshot.go
index 484ae8ff4..b76c58583 100644
--- a/syz-manager/snapshot.go
+++ b/syz-manager/snapshot.go
@@ -5,6 +5,7 @@ package main
import (
"bytes"
+ "context"
"errors"
"fmt"
"time"
@@ -14,27 +15,24 @@ import (
"github.com/google/syzkaller/pkg/fuzzer/queue"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/vm"
+ "github.com/google/syzkaller/vm/dispatcher"
)
-func (mgr *Manager) snapshotLoop() {
- queue.StatNumFuzzing.Add(mgr.vmPool.Count())
- for index := 0; index < mgr.vmPool.Count(); index++ {
- index := index
- go func() {
- for {
- log.Error(mgr.snapshotVM(index))
- }
- }()
- }
- select {}
-}
+func (mgr *Manager) snapshotInstance(ctx context.Context, inst *vm.Instance, updInfo dispatcher.UpdateInfo) {
+ queue.StatNumFuzzing.Add(1)
+ defer queue.StatNumFuzzing.Add(-1)
+
+ updInfo(func(info *dispatcher.Info) {
+ info.Status = "snapshot fuzzing"
+ })
-func (mgr *Manager) snapshotVM(index int) error {
- inst, err := mgr.vmPool.Create(index)
+ err := mgr.snapshotLoop(ctx, inst)
if err != nil {
- return err
+ log.Error(err)
}
- defer inst.Close()
+}
+
+func (mgr *Manager) snapshotLoop(ctx context.Context, inst *vm.Instance) error {
executor, err := inst.Copy(mgr.cfg.ExecutorBin)
if err != nil {
return err
@@ -48,7 +46,7 @@ func (mgr *Manager) snapshotVM(index int) error {
builder := flatbuffers.NewBuilder(0)
var envFlags flatrpc.ExecEnv
- for first := true; ; first = false {
+ for first := true; ctx.Err() == nil; first = false {
queue.StatExecs.Add(1)
req := mgr.source.Next()
if first {
@@ -81,6 +79,7 @@ func (mgr *Manager) snapshotVM(index int) error {
req.Done(res)
}
+ return nil
}
func (mgr *Manager) snapshotSetup(inst *vm.Instance, builder *flatbuffers.Builder, env flatrpc.ExecEnv) error {