syz-fuzzer: setup host features during image testing

This commit is contained in:
Dmitry Vyukov 2019-05-21 12:22:32 +02:00
parent 40957b8193
commit d46b0931bd
2 changed files with 16 additions and 9 deletions

View File

@ -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
}

View File

@ -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)