From aa87fd5f7d12ce536782db5922e28b84122fdde2 Mon Sep 17 00:00:00 2001 From: chenbruce Date: Thu, 24 Jan 2019 13:01:21 +0800 Subject: [PATCH] Linker namespace configuration for the Resolv APEX. Support netd to load resolv Apex. Switch namespaces when switching library paths between /system and the APEX, so that internal library dependencies in both locations are loaded from their own directory. Bug: 119527674 Test: make; flash; lsof -p $(pidof netd) Test: 1. manual test datacall/wifi work 2. manual test tethering work 3. system/netd/tests/runtests.sh Change-Id: I3f69e85f2f529636f0ef29a2d9d71ad582c46dfb --- rootdir/etc/ld.config.legacy.txt | 24 +++++++++++++++++++++--- rootdir/etc/ld.config.txt | 24 ++++++++++++++++++++---- rootdir/etc/ld.config.vndk_lite.txt | 22 ++++++++++++++++++++-- 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/rootdir/etc/ld.config.legacy.txt b/rootdir/etc/ld.config.legacy.txt index 83eb3b666..1321c241f 100644 --- a/rootdir/etc/ld.config.legacy.txt +++ b/rootdir/etc/ld.config.legacy.txt @@ -35,11 +35,11 @@ namespace.default.asan.search.paths += /odm/${LIB} # APEX related namespaces. ############################################################################### -additional.namespaces = runtime,conscrypt,media +additional.namespaces = runtime,conscrypt,media,resolv # Keep in sync with ld.config.txt in the com.android.runtime APEX. -namespace.default.links = runtime -namespace.default.asan.links = runtime +namespace.default.links = runtime,resolv +namespace.default.asan.links = runtime,resolv # Visible because some libraries are dlopen'ed, e.g. libopenjdk is dlopen'ed by # libart. namespace.default.visible = true @@ -49,6 +49,8 @@ namespace.default.link.runtime.shared_libs += libnativebridge.so namespace.default.link.runtime.shared_libs += libnativehelper.so namespace.default.link.runtime.shared_libs += libnativeloader.so +namespace.default.link.resolv.shared_libs = libnetd_resolv.so + ############################################################################### # "runtime" APEX namespace # @@ -98,6 +100,22 @@ namespace.conscrypt.link.default.shared_libs = libc.so namespace.conscrypt.link.default.shared_libs += libm.so namespace.conscrypt.link.default.shared_libs += libdl.so +############################################################################### +# "resolv" APEX namespace +# +# This namespace is for libraries within the resolv APEX. +############################################################################### +namespace.resolv.isolated = true +namespace.resolv.visible = true + +namespace.resolv.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.asan.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.links = default +namespace.resolv.link.default.shared_libs = libc.so +namespace.resolv.link.default.shared_libs += libm.so +namespace.resolv.link.default.shared_libs += libdl.so +namespace.resolv.link.default.shared_libs += libbinder_ndk.so + ############################################################################### # Namespace config for binaries under /postinstall. # Only one default namespace is defined and it has no directories other than diff --git a/rootdir/etc/ld.config.txt b/rootdir/etc/ld.config.txt index 05f75bfb0..f37f92266 100644 --- a/rootdir/etc/ld.config.txt +++ b/rootdir/etc/ld.config.txt @@ -28,7 +28,7 @@ dir.system = /data/benchmarktest64 dir.postinstall = /postinstall [system] -additional.namespaces = runtime,conscrypt,media,sphal,vndk,rs +additional.namespaces = runtime,conscrypt,media,resolv,sphal,vndk,rs ############################################################################### # "default" namespace @@ -73,7 +73,6 @@ namespace.default.permitted.paths += /%PRODUCT_SERVICES%/app namespace.default.permitted.paths += /%PRODUCT_SERVICES%/priv-app namespace.default.permitted.paths += /data namespace.default.permitted.paths += /mnt/expand -namespace.default.permitted.paths += /apex/com.android.resolv/${LIB} namespace.default.asan.search.paths = /data/asan/system/${LIB} namespace.default.asan.search.paths += /system/${LIB} @@ -105,10 +104,9 @@ namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/framework namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/app namespace.default.asan.permitted.paths += /%PRODUCT_SERVICES%/priv-app namespace.default.asan.permitted.paths += /mnt/expand -namespace.default.asan.permitted.paths += /apex/com.android.resolv/${LIB} # Keep in sync with ld.config.txt in the com.android.runtime APEX. -namespace.default.links = runtime +namespace.default.links = runtime,resolv # Visible because some libraries are dlopen'ed, e.g. libopenjdk is dlopen'ed by # libart. namespace.default.visible = true @@ -118,6 +116,8 @@ namespace.default.link.runtime.shared_libs += libnativebridge.so namespace.default.link.runtime.shared_libs += libnativehelper.so namespace.default.link.runtime.shared_libs += libnativeloader.so +namespace.default.link.resolv.shared_libs = libnetd_resolv.so + ############################################################################### # "runtime" APEX namespace # @@ -167,6 +167,22 @@ namespace.conscrypt.link.default.shared_libs = libc.so namespace.conscrypt.link.default.shared_libs += libm.so namespace.conscrypt.link.default.shared_libs += libdl.so +############################################################################### +# "resolv" APEX namespace +# +# This namespace is for libraries within the resolv APEX. +############################################################################### +namespace.resolv.isolated = true +namespace.resolv.visible = true + +namespace.resolv.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.asan.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.links = default +namespace.resolv.link.default.shared_libs = libc.so +namespace.resolv.link.default.shared_libs += libm.so +namespace.resolv.link.default.shared_libs += libdl.so +namespace.resolv.link.default.shared_libs += libbinder_ndk.so + ############################################################################### # "sphal" namespace # diff --git a/rootdir/etc/ld.config.vndk_lite.txt b/rootdir/etc/ld.config.vndk_lite.txt index 335369eb5..a8ed04f24 100644 --- a/rootdir/etc/ld.config.vndk_lite.txt +++ b/rootdir/etc/ld.config.vndk_lite.txt @@ -28,7 +28,7 @@ dir.system = /data/benchmarktest64 dir.postinstall = /postinstall [system] -additional.namespaces = runtime,conscrypt,media,sphal,vndk,rs +additional.namespaces = runtime,conscrypt,media,resolv,sphal,vndk,rs ############################################################################### # "default" namespace @@ -57,7 +57,7 @@ namespace.default.asan.search.paths += /%PRODUCT_SERVICES%/${LIB} # Keep in sync with the platform namespace in the com.android.runtime APEX # ld.config.txt. -namespace.default.links = runtime +namespace.default.links = runtime,resolv # Visible because some libraries are dlopen'ed, e.g. libopenjdk is dlopen'ed by # libart. namespace.default.visible = true @@ -66,6 +66,8 @@ namespace.default.link.runtime.shared_libs += libdexfile_external.so namespace.default.link.runtime.shared_libs += libnativehelper.so namespace.default.link.runtime.shared_libs += libnativeloader.so +namespace.default.link.resolv.shared_libs = libnetd_resolv.so + ############################################################################### # "runtime" APEX namespace # @@ -116,6 +118,22 @@ namespace.conscrypt.link.default.shared_libs = libc.so namespace.conscrypt.link.default.shared_libs += libm.so namespace.conscrypt.link.default.shared_libs += libdl.so +############################################################################### +# "resolv" APEX namespace +# +# This namespace is for libraries within the resolv APEX. +############################################################################### +namespace.resolv.isolated = true +namespace.resolv.visible = true + +namespace.resolv.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.asan.search.paths = /apex/com.android.resolv/${LIB} +namespace.resolv.links = default +namespace.resolv.link.default.shared_libs = libc.so +namespace.resolv.link.default.shared_libs += libm.so +namespace.resolv.link.default.shared_libs += libdl.so +namespace.resolv.link.default.shared_libs += libbinder_ndk.so + ############################################################################### # "sphal" namespace #