From f736b924db7e45d0779b9e928a8d5ce22b927886 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 8 May 2023 22:11:44 +0000 Subject: [PATCH] Add use_platform_libs to fuzz config BUG: b/279082026 TEST: mma Change-Id: Ia3dba44f66ec18d1076f1b13cc654a35b31c02d4 WANT_LGTM=ccross --- fuzz/fuzz_common.go | 27 +++++++++++++++++++++++++++ java/fuzz.go | 15 +++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/fuzz/fuzz_common.go b/fuzz/fuzz_common.go index 2a1b40452..b470304b5 100644 --- a/fuzz/fuzz_common.go +++ b/fuzz/fuzz_common.go @@ -170,6 +170,27 @@ func (service_privilege ServicePrivilege) isValidServicePrivilege() bool { return false } +type UsePlatformLibs string + +const ( + unknown_use_platform_libs UsePlatformLibs = "unknown_use_platform_libs" + // Use the native libraries on the device, typically in /system directory + use_platform_libs = "use_platform_libs" + // Do not use any native libraries (ART will not be initialized) + use_none = "use_none" +) + +func (use_platform_libs UsePlatformLibs) isValidUsePlatformLibs() bool { + switch use_platform_libs { + case "", + unknown_use_platform_libs, + use_platform_libs, + use_none: + return true + } + return false +} + type UserData string const ( @@ -284,6 +305,10 @@ func IsValidConfig(fuzzModule FuzzPackagedModule, moduleName string) bool { if !config.Automatically_route_to.isValidAutomaticallyRouteTo() { panic(fmt.Errorf("Invalid automatically_route_to in fuzz config in %s", moduleName)) } + + if !config.Use_platform_libs.isValidUsePlatformLibs() { + panic(fmt.Errorf("Invalid use_platform_libs in fuzz config in %s", moduleName)) + } } return true } @@ -341,6 +366,8 @@ type FuzzConfig struct { Target_modules []string `json:"target_modules,omitempty"` // Specifies a bug assignee to replace default ISE assignment Triage_assignee string `json:"triage_assignee,omitempty"` + // Specifies libs used to initialize ART (java only, 'use_none' for no initialization) + Use_platform_libs UsePlatformLibs `json:"use_platform_libs,omitempty"` } type FuzzFrameworks struct { diff --git a/java/fuzz.go b/java/fuzz.go index 4aa6dbffd..770b694c9 100644 --- a/java/fuzz.go +++ b/java/fuzz.go @@ -30,8 +30,12 @@ import ( const ( hostString = "host" targetString = "target" + deviceString = "device" ) +// Any shared libs for these deps will also be packaged +var artDeps = []string{"libdl_android"} + func init() { RegisterJavaFuzzBuildComponents(android.InitRegistrationContext) } @@ -78,7 +82,18 @@ func JavaFuzzFactory() android.Module { } func (j *JavaFuzzTest) DepsMutator(ctx android.BottomUpMutatorContext) { + if j.Os().Class.String() == deviceString { + j.testProperties.Jni_libs = append(j.testProperties.Jni_libs, artDeps...) + } + if len(j.testProperties.Jni_libs) > 0 { + if j.fuzzPackagedModule.FuzzProperties.Fuzz_config == nil { + config := &fuzz.FuzzConfig{} + j.fuzzPackagedModule.FuzzProperties.Fuzz_config = config + } + // this will be used by the ingestion pipeline to determine the version + // of jazzer to add to the fuzzer package + j.fuzzPackagedModule.FuzzProperties.Fuzz_config.IsJni = proptools.BoolPtr(true) for _, target := range ctx.MultiTargets() { sharedLibVariations := append(target.Variations(), blueprint.Variation{Mutator: "link", Variation: "shared"}) ctx.AddFarVariationDependencies(sharedLibVariations, jniLibTag, j.testProperties.Jni_libs...)