aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/mgrconfig/load.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-11-29 10:40:36 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-11-30 13:33:18 +0100
commit1fd901159188a5e0c2b3559ae7ec7deff7c4e7a2 (patch)
tree82c9a88630b01824aab94866cbe1d405a7e7219d /pkg/mgrconfig/load.go
parenta142e60d5cf11dc798e4909c97803d75add83a11 (diff)
pkg/mgrconfig: add prog&sys.targets targets to Config
These are widely used with the config as the refactoring shows. This removes a bunch of unnecessary code. Also fixes a number of bugs where we confused Arch with VMArch.
Diffstat (limited to 'pkg/mgrconfig/load.go')
-rw-r--r--pkg/mgrconfig/load.go34
1 files changed, 24 insertions, 10 deletions
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index a1bde9efa..d4756a0cd 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -19,6 +19,9 @@ import (
// Derived config values that are handy to keep with the config, filled after reading user config.
type Derived struct {
+ Target *prog.Target
+ SysTarget *targets.Target
+
// Parsed Target:
TargetOS string
TargetArch string
@@ -28,6 +31,8 @@ type Derived struct {
SyzFuzzerBin string
SyzExecprogBin string
SyzExecutorBin string
+
+ Syscalls []int
}
func LoadData(data []byte) (*Config, error) {
@@ -81,10 +86,18 @@ func defaultValues() *Config {
func loadPartial(cfg *Config) (*Config, error) {
var err error
- cfg.TargetOS, cfg.TargetVMArch, cfg.TargetArch, err = splitTarget(cfg.Target)
+ cfg.TargetOS, cfg.TargetVMArch, cfg.TargetArch, err = splitTarget(cfg.RawTarget)
+ if err != nil {
+ return nil, err
+ }
+ cfg.Target, err = prog.GetTarget(cfg.TargetOS, cfg.TargetArch)
if err != nil {
return nil, err
}
+ cfg.SysTarget = targets.Get(cfg.TargetOS, cfg.TargetVMArch)
+ if cfg.SysTarget == nil {
+ return nil, fmt.Errorf("unsupported OS/arch: %v/%v", cfg.TargetOS, cfg.TargetVMArch)
+ }
return cfg, nil
}
@@ -114,7 +127,7 @@ func Complete(cfg *Config) error {
}
cfg.Image = osutil.Abs(cfg.Image)
}
- if err := completeBinaries(cfg); err != nil {
+ if err := cfg.completeBinaries(); err != nil {
return err
}
if cfg.Procs < 1 || cfg.Procs > prog.MaxPids {
@@ -125,7 +138,7 @@ func Complete(cfg *Config) error {
default:
return fmt.Errorf("config param sandbox must contain one of none/setuid/namespace/android")
}
- if err := checkSSHParams(cfg); err != nil {
+ if err := cfg.checkSSHParams(); err != nil {
return err
}
cfg.CompleteKernelDirs()
@@ -148,6 +161,11 @@ func Complete(cfg *Config) error {
return err
}
}
+ var err error
+ cfg.Syscalls, err = ParseEnabledSyscalls(cfg.Target, cfg.EnabledSyscalls, cfg.DisabledSyscalls)
+ if err != nil {
+ return err
+ }
return nil
}
@@ -172,7 +190,7 @@ func (cfg *Config) CompleteKernelDirs() {
cfg.KernelBuildSrc = osutil.Abs(cfg.KernelBuildSrc)
}
-func checkSSHParams(cfg *Config) error {
+func (cfg *Config) checkSSHParams() error {
if cfg.SSHKey == "" {
return nil
}
@@ -187,13 +205,9 @@ func checkSSHParams(cfg *Config) error {
return nil
}
-func completeBinaries(cfg *Config) error {
- sysTarget := targets.Get(cfg.TargetOS, cfg.TargetArch)
- if sysTarget == nil {
- return fmt.Errorf("unsupported OS/arch: %v/%v", cfg.TargetOS, cfg.TargetArch)
- }
+func (cfg *Config) completeBinaries() error {
cfg.Syzkaller = osutil.Abs(cfg.Syzkaller)
- exe := sysTarget.ExeExtension
+ exe := cfg.SysTarget.ExeExtension
targetBin := func(name, arch string) string {
return filepath.Join(cfg.Syzkaller, "bin", cfg.TargetOS+"_"+arch, name+exe)
}