platform_system_vold/Android.bp

271 lines
5.5 KiB
Text
Raw Normal View History

cc_defaults {
name: "vold_default_flags",
cflags: [
"-Wall",
"-Werror",
"-Wextra",
"-Wno-missing-field-initializers",
"-Wno-unused-parameter",
"-Wno-unused-variable",
],
clang: true,
tidy: true,
tidy_checks: [
"-*",
"cert-*",
"clang-analyzer-security*",
"android-*",
],
tidy_flags: [
"-warnings-as-errors=clang-analyzer-security*,cert-*",
],
}
cc_defaults {
name: "vold_default_libs",
static_libs: [
"libavb",
"libbootloader_message",
"libdm",
"libext2_uuid",
"libfec",
"libfec_rs",
"libfs_avb",
"libfs_mgr",
"libscrypt_static",
"libsquashfs_utils",
"libvold_binder",
],
shared_libs: [
"android.hardware.keymaster@3.0",
"android.hardware.keymaster@4.0",
"android.hardware.boot@1.0",
"libbase",
"libbinder",
"libcrypto",
"libcrypto_utils",
"libcutils",
"libdiskconfig",
"libext4_utils",
"libf2fs_sparseblock",
"libhardware",
"libhardware_legacy",
"libhidlbase",
"libkeymaster4support",
"libkeyutils",
"liblog",
"liblogwrap",
"libselinux",
"libsysutils",
"libutils",
],
}
cc_library_static {
name: "libvold_binder",
defaults: ["vold_default_flags"],
srcs: [
":vold_aidl",
],
shared_libs: [
"libbinder",
"libutils",
],
aidl: {
local_include_dirs: ["binder"],
include_dirs: ["frameworks/native/aidl/binder"],
export_aidl_headers: true,
},
}
cc_library_headers {
name: "libvold_headers",
recovery_available: true,
export_include_dirs: ["."],
}
// Static library factored out to support testing
cc_library_static {
name: "libvold",
defaults: [
"vold_default_flags",
"vold_default_libs",
],
srcs: [
"AppFuseUtil.cpp",
"Benchmark.cpp",
"CheckEncryption.cpp",
"Checkpoint.cpp",
"Devmapper.cpp",
"EncryptInplace.cpp",
"FileDeviceUtils.cpp",
"FsCrypt.cpp",
"IdleMaint.cpp",
"KeyBuffer.cpp",
"KeyStorage.cpp",
"KeyUtil.cpp",
"Keymaster.cpp",
"Loop.cpp",
"MetadataCrypt.cpp",
"MoveStorage.cpp",
"NetlinkHandler.cpp",
"NetlinkManager.cpp",
"Process.cpp",
"ScryptParameters.cpp",
"Utils.cpp",
"VoldNativeService.cpp",
"VoldUtil.cpp",
"VolumeManager.cpp",
"cryptfs.cpp",
"fs/Exfat.cpp",
"fs/Ext4.cpp",
"fs/F2fs.cpp",
"fs/Vfat.cpp",
"model/Disk.cpp",
"model/EmulatedVolume.cpp",
"model/ObbVolume.cpp",
"model/PrivateVolume.cpp",
"model/PublicVolume.cpp",
"model/VolumeBase.cpp",
"model/StubVolume.cpp",
],
product_variables: {
arc: {
exclude_srcs: [
"AppFuseUtil.cpp",
"model/ObbVolume.cpp",
],
static_libs: [
"arc_services_aidl",
"libarcappfuse",
"libarcobbvolume",
],
},
debuggable: {
cppflags: ["-D__ANDROID_DEBUGGABLE__"],
},
},
shared_libs: [
"android.hardware.health.storage@1.0",
],
Don't unmount /storage for early native processes Motivation: Early processes launched before the runtime APEX - that hosts the bionic libs - is activated can't use the bionic libs from the APEX, but from the system partition (which we call the bootstrap bionic). Other processes after the APEX activation should use the bionic libs from the APEX. In order to let both types of processes to access the bionic libs via the same standard paths /system/lib/{libc|libdl|libm}.so, some mount namespace magic is used. To be specific, when the device boots, the init initially bind-mounts the bootstrap bionic libs to the standard paths with MS_PRIVATE. Early processes are then executed with their own mount namespaces (via unshare(CLONE_NEWNS)). After the runtime APEX is activated, init bind-mounts the bionic libs in the APEX to the same standard paths. Processes launched thereafter use the bionic libs from the APEX (which can be updated.) Important thing is that, since the propagation type of the mount points (the standard paths) is 'private', the new bind-mount events for the updated bionic libs should not affect the early processes. Otherwise, they would experience sudden change of bionic libs at runtime. However, other mount/unmounts events outside of the private mount points are still shared across early/late processes as before. This is made possible because the propagation type of / is 'shared' . Problem: vold uses the equality of the mount namespace to filter-out processes that share the global mount namespace (the namespace of the init). However, due to the aforementioned change, the early processes are not filtered out because they have different mount namespaces. As a result, umount2("/storage/") is executed on them and this unmount event becomes visible to the global mount namespace (because as mentioned before / is 'shared'). Solution: Fiter-out the early processes by skipping a native (non-Java) process whose UID is < AID_APP. The former condition is because all early processes are native ones; i.e., zygote is started after the runtime APEX is activated. The latter condition is to not filter-out native processes created locally by apps. Bug: 120266448 Test: m; device boots Change-Id: I054deedc4af8421854cf35be84e14995523a259a
2019-01-04 05:35:25 +01:00
whole_static_libs: [
"com.android.sysprop.apex",
],
}
cc_binary {
name: "vold",
defaults: [
"vold_default_flags",
"vold_default_libs",
],
srcs: ["main.cpp"],
static_libs: ["libvold"],
product_variables: {
arc: {
static_libs: [
"arc_services_aidl",
"libarcappfuse",
"libarcobbvolume",
],
},
},
init_rc: [
"vold.rc",
"wait_for_keymaster.rc",
],
required: [
"mke2fs",
"vold_prepare_subdirs",
"wait_for_keymaster",
],
shared_libs: [
"android.hardware.health.storage@1.0",
],
}
cc_binary {
name: "vdc",
defaults: ["vold_default_flags"],
srcs: ["vdc.cpp"],
shared_libs: [
"libbase",
"libbinder",
"libcutils",
"libutils",
],
static_libs: [
"libvold_binder",
],
init_rc: ["vdc.rc"],
}
cc_binary {
name: "wait_for_keymaster",
defaults: ["vold_default_flags"],
srcs: [
"wait_for_keymaster.cpp",
"Keymaster.cpp",
],
shared_libs: [
"libbase",
"libbinder",
"android.hardware.keymaster@3.0",
"android.hardware.keymaster@4.0",
"libhardware",
"libhardware_legacy",
"libhidlbase",
"libkeymaster4support",
],
}
cc_binary {
name: "secdiscard",
defaults: ["vold_default_flags"],
srcs: [
"FileDeviceUtils.cpp",
"secdiscard.cpp",
],
shared_libs: ["libbase"],
}
cc_binary {
name: "vold_prepare_subdirs",
defaults: ["vold_default_flags"],
srcs: ["vold_prepare_subdirs.cpp", "Utils.cpp"],
shared_libs: [
"libbase",
"libcutils",
"liblogwrap",
"libselinux",
"libutils",
],
static_libs: [
"libvold_binder",
],
}
filegroup {
name: "vold_aidl",
srcs: [
"binder/android/os/IVold.aidl",
"binder/android/os/IVoldListener.aidl",
"binder/android/os/IVoldTaskListener.aidl",
],
path: "binder",
}