aboutsummaryrefslogtreecommitdiffstats
path: root/tools/syz-testbed
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-02-10 15:13:03 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-02-25 18:57:42 +0100
commitaa3dbd72ed6726be5bf1bec14a2ceaca369a8063 (patch)
treea9d05b9e5b20fc512c4f0b62c444302e7e496a4c /tools/syz-testbed
parentdbfe5869946787d945f1e52f9a435c5284c9edd3 (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.go6
-rw-r--r--tools/syz-testbed/instance.go17
-rw-r--r--tools/syz-testbed/testbed.go14
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
}