aboutsummaryrefslogtreecommitdiffstats
path: root/syz-manager
diff options
context:
space:
mode:
Diffstat (limited to 'syz-manager')
-rw-r--r--syz-manager/manager.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/syz-manager/manager.go b/syz-manager/manager.go
index aed721a79..3b6072629 100644
--- a/syz-manager/manager.go
+++ b/syz-manager/manager.go
@@ -30,6 +30,7 @@ import (
"github.com/google/syzkaller/pkg/fuzzer"
"github.com/google/syzkaller/pkg/fuzzer/queue"
"github.com/google/syzkaller/pkg/gce"
+ "github.com/google/syzkaller/pkg/ifaceprobe"
"github.com/google/syzkaller/pkg/log"
"github.com/google/syzkaller/pkg/manager"
"github.com/google/syzkaller/pkg/mgrconfig"
@@ -154,6 +155,20 @@ var (
Description: `run unit tests
Run sys/os/test/* tests in various modes and print results.`,
}
+ ModeIfaceProbe = &Mode{
+ Name: "iface-probe",
+ Description: `run dynamic part of kernel interface auto-extraction
+ When the probe is finished, manager writes the result to workdir/interfaces.json file and exits.`,
+ CheckConfig: func(cfg *mgrconfig.Config) error {
+ if cfg.Snapshot {
+ return fmt.Errorf("snapshot mode is not supported")
+ }
+ if cfg.Sandbox != "none" {
+ return fmt.Errorf("sandbox \"%v\" is not supported (only \"none\")", cfg.Sandbox)
+ }
+ return nil
+ },
+ }
modes = []*Mode{
ModeFuzzing,
@@ -161,6 +176,7 @@ var (
ModeCorpusTriage,
ModeCorpusRun,
ModeRunTests,
+ ModeIfaceProbe,
}
)
@@ -285,6 +301,9 @@ func RunManager(mode *Mode, cfg *mgrconfig.Config) {
Stats: mgr.servStats,
Debug: *flagDebug,
}
+ if mode == ModeIfaceProbe {
+ rpcCfg.CheckGlobs = ifaceprobe.Globs()
+ }
mgr.serv, err = rpcserver.New(rpcCfg)
if err != nil {
log.Fatalf("failed to create rpc server: %v", err)
@@ -1164,6 +1183,17 @@ func (mgr *Manager) MachineChecked(info *flatrpc.InfoRequest, features flatrpc.F
mgr.exit("tests")
}()
return ctx
+ } else if mgr.mode == ModeIfaceProbe {
+ exec := queue.Plain()
+ go func() {
+ res, err := ifaceprobe.Run(vm.ShutdownCtx(), mgr.cfg, exec, info)
+ if err != nil {
+ log.Fatalf("interface probing failed: %v", err)
+ }
+ mgr.saveJSON("interfaces.json", res)
+ mgr.exit("interface probe")
+ }()
+ return exec
}
panic(fmt.Sprintf("unexpected mode %q", mgr.mode.Name))
}