diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2022-02-10 15:13:03 +0000 |
|---|---|---|
| committer | Aleksandr Nogikh <wp32pw@gmail.com> | 2022-02-25 18:57:42 +0100 |
| commit | aa3dbd72ed6726be5bf1bec14a2ceaca369a8063 (patch) | |
| tree | a9d05b9e5b20fc512c4f0b62c444302e7e496a4c /tools/syz-testbed | |
| parent | dbfe5869946787d945f1e52f9a435c5284c9edd3 (diff) | |
tools/syz-testbed: don't parse configs
It's not practical to parse configs from tools/syz-testbed because it
limits the tool to using only those configuration options, which are
supported by the syzkaller version at the moment of tools/syz-testbed
compilation.
Operate with manager configs as if they were just some JSON objects.
Introduce a PatchJSON method to update their fields in a convenient way.
Diffstat (limited to 'tools/syz-testbed')
| -rw-r--r-- | tools/syz-testbed/checkout.go | 6 | ||||
| -rw-r--r-- | tools/syz-testbed/instance.go | 17 | ||||
| -rw-r--r-- | tools/syz-testbed/testbed.go | 14 |
3 files changed, 18 insertions, 19 deletions
diff --git a/tools/syz-testbed/checkout.go b/tools/syz-testbed/checkout.go index 91508ff99..3a4265013 100644 --- a/tools/syz-testbed/checkout.go +++ b/tools/syz-testbed/checkout.go @@ -4,13 +4,13 @@ package main import ( + "encoding/json" "fmt" "log" "path/filepath" "time" syz_instance "github.com/google/syzkaller/pkg/instance" - "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/vcs" ) @@ -18,7 +18,7 @@ import ( type Checkout struct { Path string Name string - ManagerConfig *mgrconfig.Config + ManagerConfig json.RawMessage Running []*Instance Completed []*RunResult } @@ -35,7 +35,7 @@ func (checkout *Checkout) ArchiveRunning() error { return nil } -func (ctx *TestbedContext) NewCheckout(config *CheckoutConfig, mgrConfig *mgrconfig.Config) (*Checkout, error) { +func (ctx *TestbedContext) NewCheckout(config *CheckoutConfig, mgrConfig json.RawMessage) (*Checkout, error) { checkout := &Checkout{ Name: config.Name, Path: filepath.Join(ctx.Config.Workdir, "checkouts", config.Name), diff --git a/tools/syz-testbed/instance.go b/tools/syz-testbed/instance.go index 6601a2c4a..bd25d55eb 100644 --- a/tools/syz-testbed/instance.go +++ b/tools/syz-testbed/instance.go @@ -20,7 +20,6 @@ type Instance struct { Workdir string BenchFile string LogFile string - HTTP string ExecCommand string ExecCommandArgs []string stopChannel chan bool @@ -111,11 +110,16 @@ func (ctx *TestbedContext) NewInstance(checkout *Checkout, mgrName string) (*Ins } log.Printf("[%s] Generating syz-manager config", name) - managerCfg := *checkout.ManagerConfig - managerCfg.Name = mgrName - managerCfg.Workdir = workdir - managerCfg.Syzkaller = checkout.Path - err = config.SaveFile(managerCfgPath, managerCfg) + managerCfg, err := config.PatchJSON(checkout.ManagerConfig, map[string]interface{}{ + "name": mgrName, + "workdir": workdir, + "syzkaller": checkout.Path, + }) + if err != nil { + return nil, fmt.Errorf("failed to patch mgr config") + } + + err = osutil.WriteFile(managerCfgPath, managerCfg) if err != nil { return nil, fmt.Errorf("failed to save manager config to %s: %s", managerCfgPath, err) } @@ -125,7 +129,6 @@ func (ctx *TestbedContext) NewInstance(checkout *Checkout, mgrName string) (*Ins Workdir: workdir, BenchFile: bench, LogFile: logFile, - HTTP: managerCfg.HTTP, ExecCommand: filepath.Join(checkout.Path, "bin", "syz-manager"), ExecCommandArgs: []string{"-config", managerCfgPath, "-bench", bench}, stopChannel: make(chan bool, 1), diff --git a/tools/syz-testbed/testbed.go b/tools/syz-testbed/testbed.go index 12884d0a4..f83d1dfa9 100644 --- a/tools/syz-testbed/testbed.go +++ b/tools/syz-testbed/testbed.go @@ -19,7 +19,6 @@ import ( "time" "github.com/google/syzkaller/pkg/config" - "github.com/google/syzkaller/pkg/mgrconfig" "github.com/google/syzkaller/pkg/osutil" "github.com/google/syzkaller/pkg/tool" "github.com/google/syzkaller/pkg/vcs" @@ -107,18 +106,15 @@ func main() { ctx.Loop(shutdown) } -func (ctx *TestbedContext) MakeMgrConfig(base, patch json.RawMessage) *mgrconfig.Config { - mergedConfig, err := config.MergeJSONData(base, patch) +func (ctx *TestbedContext) MakeMgrConfig(base, patch json.RawMessage) json.RawMessage { + mgrCfg, err := config.MergeJSONs(base, patch) if err != nil { tool.Failf("failed to apply a patch to the base manager config: %s", err) } - mgrCfg, err := mgrconfig.LoadPartialData(mergedConfig) + // We don't care much about the specific ports of syz-managers. + mgrCfg, err = config.PatchJSON(mgrCfg, map[string]interface{}{"HTTP": ":0"}) if err != nil { - tool.Failf("failed to parse base manager config: %s", err) - } - if mgrCfg.HTTP == "" { - // Actually, we don't care much about the specific ports of syz-managers. - mgrCfg.HTTP = ":0" + tool.Failf("failed to assign empty HTTP value: %s", err) } return mgrCfg } |
