diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-08-07 15:09:53 +0200 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2024-08-13 14:20:08 +0000 |
| commit | ebd71c054bab8fad556745259f1d7974ed60095d (patch) | |
| tree | b3cd3ee805fd05ed1b5cd2e29b18e9a273466de9 /syz-manager/snapshot.go | |
| parent | eed4a69f8097dc228b4e11cfb84f0162ae58adb5 (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.go | 33 |
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 { |
