From 8ce8db9ed6a28782e5192efbb8de78814abd2877 Mon Sep 17 00:00:00 2001 From: Jooyung Han Date: Fri, 15 May 2020 19:05:05 +0900 Subject: apex: install hwasan lib if depended on libc There're two ways to enable hwasan: - global setting: TARGET_SANITIZE=hwaddress - individual setting: sanitize: { hwaddress: true } This change covers both cases by looking up if com.android.runtime is hwaddress santized or not. Bug: 156678661 Test: m (soong test added) Change-Id: I67c382c3e76a06f4b27f221eebd153c698647227 --- apex/apex_test.go | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) (limited to 'apex/apex_test.go') diff --git a/apex/apex_test.go b/apex/apex_test.go index 021c3e22a..cb98d97bf 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -907,6 +907,130 @@ func TestApexWithRuntimeLibsDependency(t *testing.T) { } +func TestRuntimeApexShouldInstallHwasanIfLibcDependsOnIt(t *testing.T) { + ctx, _ := testApex(t, "", func(fs map[string][]byte, config android.Config) { + bp := ` + apex { + name: "com.android.runtime", + key: "com.android.runtime.key", + native_shared_libs: ["libc"], + } + + apex_key { + name: "com.android.runtime.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libc", + no_libcrt: true, + nocrt: true, + stl: "none", + system_shared_libs: [], + stubs: { versions: ["1"] }, + apex_available: ["com.android.runtime"], + + sanitize: { + hwaddress: true, + } + } + + cc_prebuilt_library_shared { + name: "libclang_rt.hwasan-aarch64-android", + no_libcrt: true, + nocrt: true, + stl: "none", + system_shared_libs: [], + srcs: [""], + stubs: { versions: ["1"] }, + + sanitize: { + never: true, + }, + } + ` + // override bp to use hard-coded names: com.android.runtime and libc + fs["Android.bp"] = []byte(bp) + fs["system/sepolicy/apex/com.android.runtime-file_contexts"] = nil + }) + + ensureExactContents(t, ctx, "com.android.runtime", "android_common_hwasan_com.android.runtime_image", []string{ + "lib64/bionic/libc.so", + "lib64/bionic/libclang_rt.hwasan-aarch64-android.so", + }) + + hwasan := ctx.ModuleForTests("libclang_rt.hwasan-aarch64-android", "android_arm64_armv8-a_shared") + + installed := hwasan.Description("install libclang_rt.hwasan") + ensureContains(t, installed.Output.String(), "/system/lib64/bootstrap/libclang_rt.hwasan-aarch64-android.so") + + symlink := hwasan.Description("install symlink libclang_rt.hwasan") + ensureEquals(t, symlink.Args["fromPath"], "/apex/com.android.runtime/lib64/bionic/libclang_rt.hwasan-aarch64-android.so") + ensureContains(t, symlink.Output.String(), "/system/lib64/libclang_rt.hwasan-aarch64-android.so") +} + +func TestRuntimeApexShouldInstallHwasanIfHwaddressSanitized(t *testing.T) { + ctx, _ := testApex(t, "", func(fs map[string][]byte, config android.Config) { + bp := ` + apex { + name: "com.android.runtime", + key: "com.android.runtime.key", + native_shared_libs: ["libc"], + } + + apex_key { + name: "com.android.runtime.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + cc_library { + name: "libc", + no_libcrt: true, + nocrt: true, + stl: "none", + system_shared_libs: [], + stubs: { versions: ["1"] }, + apex_available: ["com.android.runtime"], + } + + cc_prebuilt_library_shared { + name: "libclang_rt.hwasan-aarch64-android", + no_libcrt: true, + nocrt: true, + stl: "none", + system_shared_libs: [], + srcs: [""], + stubs: { versions: ["1"] }, + + sanitize: { + never: true, + }, + } + ` + // override bp to use hard-coded names: com.android.runtime and libc + fs["Android.bp"] = []byte(bp) + fs["system/sepolicy/apex/com.android.runtime-file_contexts"] = nil + + config.TestProductVariables.SanitizeDevice = []string{"hwaddress"} + }) + + ensureExactContents(t, ctx, "com.android.runtime", "android_common_hwasan_com.android.runtime_image", []string{ + "lib64/bionic/libc.so", + "lib64/bionic/libclang_rt.hwasan-aarch64-android.so", + }) + + hwasan := ctx.ModuleForTests("libclang_rt.hwasan-aarch64-android", "android_arm64_armv8-a_shared") + + installed := hwasan.Description("install libclang_rt.hwasan") + ensureContains(t, installed.Output.String(), "/system/lib64/bootstrap/libclang_rt.hwasan-aarch64-android.so") + + symlink := hwasan.Description("install symlink libclang_rt.hwasan") + ensureEquals(t, symlink.Args["fromPath"], "/apex/com.android.runtime/lib64/bionic/libclang_rt.hwasan-aarch64-android.so") + ensureContains(t, symlink.Output.String(), "/system/lib64/libclang_rt.hwasan-aarch64-android.so") +} + func TestApexDependsOnLLNDKTransitively(t *testing.T) { testcases := []struct { name string -- cgit v1.2.3-59-g8ed1b