diff --git a/syz-fuzzer/fuzzer.go b/syz-fuzzer/fuzzer.go index 6c581cb9..22387135 100644 --- a/syz-fuzzer/fuzzer.go +++ b/syz-fuzzer/fuzzer.go @@ -159,11 +159,16 @@ func main() { if err := manager.Call("Manager.Connect", a, r); err != nil { log.Fatalf("failed to connect to manager: %v ", err) } + featureFlags, err := csource.ParseFeaturesFlags("none", "none", true) + if err != nil { + log.Fatal(err) + } if r.CheckResult == nil { checkArgs.gitRevision = r.GitRevision checkArgs.targetRevision = r.TargetRevision checkArgs.enabledCalls = r.EnabledCalls checkArgs.allSandboxes = r.AllSandboxes + checkArgs.featureFlags = featureFlags r.CheckResult, err = checkMachine(checkArgs) if err != nil { if r.CheckResult == nil { @@ -178,18 +183,15 @@ func main() { if r.CheckResult.Error != "" { log.Fatalf("%v", r.CheckResult.Error) } + } else { + if err = host.Setup(target, r.CheckResult.Features, featureFlags, config.Executor); err != nil { + log.Fatal(err) + } } log.Logf(0, "syscalls: %v", len(r.CheckResult.EnabledCalls[sandbox])) for _, feat := range r.CheckResult.Features { log.Logf(0, "%v: %v", feat.Name, feat.Reason) } - featureFlags, err := csource.ParseFeaturesFlags("none", "none", true) - if err != nil { - log.Fatal(err) - } - if err = host.Setup(target, r.CheckResult.Features, featureFlags, config.Executor); err != nil { - log.Fatal(err) - } if r.CheckResult.Features[host.FeatureExtraCoverage].Enabled { config.Flags |= ipc.FlagExtraCover } diff --git a/syz-fuzzer/testing.go b/syz-fuzzer/testing.go index b2bb3615..d38642dc 100644 --- a/syz-fuzzer/testing.go +++ b/syz-fuzzer/testing.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/google/syzkaller/pkg/csource" "github.com/google/syzkaller/pkg/host" "github.com/google/syzkaller/pkg/ipc" "github.com/google/syzkaller/pkg/log" @@ -28,6 +29,7 @@ type checkArgs struct { allSandboxes bool ipcConfig *ipc.Config ipcExecOpts *ipc.ExecOpts + featureFlags map[string]csource.Feature } func testImage(hostAddr string, args *checkArgs) { @@ -141,7 +143,7 @@ func checkMachine(args *checkArgs) (*rpctype.CheckArgs, error) { args.ipcConfig.Flags&ipc.FlagSandboxAndroidUntrustedApp != 0 { return nil, fmt.Errorf("sandbox=android_untrusted_app is not supported (%v)", feat.Reason) } - if err := checkSimpleProgram(args); err != nil { + if err := checkSimpleProgram(args, features); err != nil { return nil, err } res := &rpctype.CheckArgs{ @@ -220,8 +222,11 @@ func checkRevisions(args *checkArgs) error { return nil } -func checkSimpleProgram(args *checkArgs) error { +func checkSimpleProgram(args *checkArgs, features *host.Features) error { log.Logf(0, "testing simple program...") + if err := host.Setup(args.target, features, args.featureFlags, args.ipcConfig.Executor); err != nil { + return fmt.Errorf("host setup failed: %v", err) + } env, err := ipc.MakeEnv(args.ipcConfig, 0) if err != nil { return fmt.Errorf("failed to create ipc env: %v", err)