summaryrefslogtreecommitdiff
path: root/rust/fuzz.go
diff options
context:
space:
mode:
author Ivan Lozano <ivanlozano@google.com> 2021-10-14 12:22:09 -0400
committer Ivan Lozano <ivanlozano@google.com> 2021-10-14 15:31:47 -0400
commit39b0bf03267fb8201c219b441436e08367c89e51 (patch)
tree713034782c5f3d7d4979144ab182905568558a95 /rust/fuzz.go
parentf7bc97ce7a9b5afd96efad424a87cc690f8568b0 (diff)
rust: Package shared libraries with fuzzer zips
Rust fuzzers were not packaging up their CC shared dependencies. This would lead to fuzzers using the shared libraries included on system, which may not be sanitized, leading to incorrect behavior. This refactors the relevant code from CC and calls it from the Rust build logic. Bug: 202282599 Test: output rust fuzzer zip file includes shared dependencies. Change-Id: I92196eb0141733797a67eae24f8e9aedea94c3bc
Diffstat (limited to 'rust/fuzz.go')
-rw-r--r--rust/fuzz.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/rust/fuzz.go b/rust/fuzz.go
index 5fb56ff40..a628b6158 100644
--- a/rust/fuzz.go
+++ b/rust/fuzz.go
@@ -111,6 +111,10 @@ func (s *rustFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) {
// List of individual fuzz targets.
s.FuzzTargets = make(map[string]bool)
+ // Map tracking whether each shared library has an install rule to avoid duplicate install rules from
+ // multiple fuzzers that depend on the same shared library.
+ sharedLibraryInstalled := make(map[string]bool)
+
ctx.VisitAllModules(func(module android.Module) {
// Discard non-fuzz targets.
rustModule, ok := module.(*Module)
@@ -145,6 +149,12 @@ func (s *rustFuzzPackager) GenerateBuildActions(ctx android.SingletonContext) {
// The executable.
files = append(files, fuzz.FileToZip{rustModule.unstrippedOutputFile.Path(), ""})
+ // Grab the list of required shared libraries.
+ sharedLibraries := fuzz.CollectAllSharedDependencies(ctx, module, cc.UnstrippedOutputFile, cc.IsValidSharedDependency)
+
+ // Package shared libraries
+ files = append(files, cc.GetSharedLibsToZip(sharedLibraries, rustModule, &s.FuzzPackager, archString, &sharedLibraryInstalled)...)
+
archDirs[archOs], ok = s.BuildZipFile(ctx, module, fuzzModule.fuzzPackagedModule, files, builder, archDir, archString, hostOrTargetString, archOs, archDirs)
if !ok {
return