aboutsummaryrefslogtreecommitdiffstats
path: root/syz-manager/manager.go
diff options
context:
space:
mode:
Diffstat (limited to 'syz-manager/manager.go')
-rw-r--r--syz-manager/manager.go29
1 files changed, 18 insertions, 11 deletions
diff --git a/syz-manager/manager.go b/syz-manager/manager.go
index 7a85a6c9a..fdb4929d7 100644
--- a/syz-manager/manager.go
+++ b/syz-manager/manager.go
@@ -310,6 +310,13 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) {
if err := mgr.serv.Listen(); err != nil {
log.Fatalf("failed to start rpc server: %v", err)
}
+ ctx := vm.ShutdownCtx()
+ go func() {
+ err := mgr.serv.Serve(ctx)
+ if err != nil {
+ log.Fatalf("%s", err)
+ }
+ }()
log.Logf(0, "serving rpc on tcp://%v", mgr.serv.Port())
if cfg.DashboardAddr != "" {
@@ -355,7 +362,6 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) {
mgr.http.ReproLoop = mgr.reproLoop
mgr.http.TogglePause = mgr.pool.TogglePause
- ctx := vm.ShutdownCtx()
if mgr.cfg.HTTP != "" {
go func() {
err := mgr.http.Serve(ctx)
@@ -1088,9 +1094,10 @@ func (mgr *Manager) BugFrames() (leaks, races []string) {
return
}
-func (mgr *Manager) MachineChecked(features flatrpc.Feature, enabledSyscalls map[*prog.Syscall]bool) queue.Source {
+func (mgr *Manager) MachineChecked(features flatrpc.Feature,
+ enabledSyscalls map[*prog.Syscall]bool) (queue.Source, error) {
if len(enabledSyscalls) == 0 {
- log.Fatalf("all system calls are disabled")
+ return nil, fmt.Errorf("all system calls are disabled")
}
if mgr.mode.ExitAfterMachineCheck {
mgr.exit(mgr.mode.Name)
@@ -1165,15 +1172,15 @@ func (mgr *Manager) MachineChecked(features flatrpc.Feature, enabledSyscalls map
mgr.serv = nil
return queue.Callback(func() *queue.Request {
return nil
- })
+ }), nil
}
- return source
+ return source, nil
} else if mgr.mode == ModeCorpusRun {
ctx := &corpusRunner{
candidates: candidates,
rnd: rand.New(rand.NewSource(time.Now().UnixNano())),
}
- return queue.DefaultOpts(ctx, opts)
+ return queue.DefaultOpts(ctx, opts), nil
} else if mgr.mode == ModeRunTests {
ctx := &runtest.Context{
Dir: filepath.Join(mgr.cfg.Syzkaller, "sys", mgr.cfg.Target.OS, "test"),
@@ -1195,7 +1202,7 @@ func (mgr *Manager) MachineChecked(features flatrpc.Feature, enabledSyscalls map
}
mgr.exit("tests")
}()
- return ctx
+ return ctx, nil
} else if mgr.mode == ModeIfaceProbe {
exec := queue.Plain()
go func() {
@@ -1209,7 +1216,7 @@ func (mgr *Manager) MachineChecked(features flatrpc.Feature, enabledSyscalls map
}
mgr.exit("interface probe")
}()
- return exec
+ return exec, nil
}
panic(fmt.Sprintf("unexpected mode %q", mgr.mode.Name))
}
@@ -1430,11 +1437,11 @@ func (mgr *Manager) dashboardReproTasks() {
}
}
-func (mgr *Manager) CoverageFilter(modules []*vminfo.KernelModule) []uint64 {
+func (mgr *Manager) CoverageFilter(modules []*vminfo.KernelModule) ([]uint64, error) {
mgr.reportGenerator.Init(modules)
filters, err := manager.PrepareCoverageFilters(mgr.reportGenerator, mgr.cfg, true)
if err != nil {
- log.Fatalf("failed to init coverage filter: %v", err)
+ return nil, fmt.Errorf("failed to init coverage filter: %w", err)
}
mgr.coverFilters = filters
mgr.http.Cover.Store(&manager.CoverageInfo{
@@ -1446,7 +1453,7 @@ func (mgr *Manager) CoverageFilter(modules []*vminfo.KernelModule) []uint64 {
for pc := range filters.ExecutorFilter {
pcs = append(pcs, pc)
}
- return pcs
+ return pcs, nil
}
func publicWebAddr(addr string) string {