aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/instance
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/instance')
-rw-r--r--pkg/instance/execprog.go33
-rw-r--r--pkg/instance/instance.go14
2 files changed, 35 insertions, 12 deletions
diff --git a/pkg/instance/execprog.go b/pkg/instance/execprog.go
index 9363998ab..e21f61a67 100644
--- a/pkg/instance/execprog.go
+++ b/pkg/instance/execprog.go
@@ -146,14 +146,26 @@ func (inst *ExecProgInstance) runBinary(bin string, duration time.Duration) (*Ru
return inst.runCommand(bin, duration, binExitConditions)
}
-func (inst *ExecProgInstance) RunCProg(p *prog.Prog, duration time.Duration,
- opts csource.Options) (*RunResult, error) {
- src, err := csource.Write(p, opts)
+type ExecParams struct {
+ // Only one of these will be used, depending on the function.
+ CProg *prog.Prog
+ SyzProg []byte
+
+ Opts csource.Options
+ Duration time.Duration
+ // If ExitConditions is empty, RunSyzProg() will assume instance.SyzExitConditions.
+ // RunCProg() always runs with binExitConditions.
+ ExitConditions vm.ExitCondition
+}
+
+func (inst *ExecProgInstance) RunCProg(params ExecParams) (*RunResult, error) {
+ src, err := csource.Write(params.CProg, params.Opts)
if err != nil {
return nil, err
}
- inst.Logf(2, "testing compiled C program (duration=%v, %+v): %s", duration, opts, p)
- return inst.RunCProgRaw(src, p.Target, duration)
+ inst.Logf(2, "testing compiled C program (duration=%v, %+v): %s",
+ params.Duration, params.Opts, params.CProg)
+ return inst.RunCProgRaw(src, params.CProg.Target, params.Duration)
}
func (inst *ExecProgInstance) RunCProgRaw(src []byte, target *prog.Target,
@@ -178,14 +190,17 @@ func (inst *ExecProgInstance) RunSyzProgFile(progFile string, duration time.Dura
return inst.runCommand(command, duration, exitCondition)
}
-func (inst *ExecProgInstance) RunSyzProg(syzProg []byte, duration time.Duration,
- opts csource.Options, exitCondition vm.ExitCondition) (*RunResult, error) {
- progFile, err := osutil.WriteTempFile(syzProg)
+func (inst *ExecProgInstance) RunSyzProg(params ExecParams) (*RunResult, error) {
+ progFile, err := osutil.WriteTempFile(params.SyzProg)
if err != nil {
return nil, err
}
defer os.Remove(progFile)
- return inst.RunSyzProgFile(progFile, duration, opts, exitCondition)
+
+ if params.ExitConditions == 0 {
+ params.ExitConditions = SyzExitConditions
+ }
+ return inst.RunSyzProgFile(progFile, params.Duration, params.Opts, params.ExitConditions)
}
func (inst *ExecProgInstance) Close() {
diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go
index b21bbed9e..f2f024216 100644
--- a/pkg/instance/instance.go
+++ b/pkg/instance/instance.go
@@ -388,7 +388,12 @@ func (inst *inst) testInstance() error {
return err
}
opts.Repeat = false
- out, err := execProg.RunSyzProg(testProg, inst.cfg.Timeouts.NoOutputRunningTime, opts, vm.ExitNormal)
+ out, err := execProg.RunSyzProg(ExecParams{
+ SyzProg: testProg,
+ Duration: inst.cfg.Timeouts.NoOutputRunningTime,
+ Opts: opts,
+ ExitConditions: vm.ExitNormal,
+ })
if err != nil {
return &TestError{Title: err.Error()}
}
@@ -420,8 +425,11 @@ func (inst *inst) testRepro() ([]byte, error) {
if err != nil {
return nil, err
}
- out, err = transformError(execProg.RunSyzProg(inst.reproSyz,
- inst.cfg.Timeouts.NoOutputRunningTime, opts, SyzExitConditions))
+ out, err = transformError(execProg.RunSyzProg(ExecParams{
+ SyzProg: inst.reproSyz,
+ Duration: inst.cfg.Timeouts.NoOutputRunningTime,
+ Opts: opts,
+ }))
if err != nil {
return out, err
}