diff options
Diffstat (limited to 'pkg/instance')
| -rw-r--r-- | pkg/instance/execprog.go | 33 | ||||
| -rw-r--r-- | pkg/instance/instance.go | 14 |
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 } |
