9ee4591cb4
This commit allows users to create a link without soname filters between two linker namespaces. The motivation is to establish one-way shared library isolation. For example, assume that there are two linker namespaces `default` and `vndk`. We would like to limit the shared libraries that can be used by the `default` namespace. In the meanwhile, we would like to allow the `vndk` namespace to use shared libs from the `default` namespace if the soname cannot be find in the search path or loaded sonames of the `vndk` namespace. shared_libs = %VNDK_CORE_LIBRARIES% shared_libs += %VNDK_SAMEPROCESS_LIBRARIES% vndk <-------------------------------------------- default \_______________________________________________/^ allow_all_shared_libs = true android_link_namespaces_all_libs() is added to libdl, but it is versioned as LIBC_PRIVATE. android_link_namespaces_all_libs() is only for unit tests. Bug: 69824336 Test: adb shell /data/nativetest/linker-unit-tests/linker-unit-tests32 Test: adb shell /data/nativetest64/linker-unit-tests/linker-unit-tests64 Test: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests Test: adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests Test: Update /system/etc/ld.config*.txt and check whether the vndk linker namespace of the vendor process can access the shared libs from the default linker namespace. Change-Id: I2879f0c5f5af60c7e56f8f743ebd2872e552286b
35 lines
1.1 KiB
C++
35 lines
1.1 KiB
C++
/*
|
|
* Copyright (C) 2018 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
static const char ns_a_public1_string[] = "libnstest_ns_a_public1.so";
|
|
|
|
extern "C" const char* get_ns_a_public1_string() {
|
|
return ns_a_public1_string;
|
|
}
|
|
|
|
|
|
extern "C" const char *get_ns_a_public1_internal_string();
|
|
|
|
extern "C" const char *delegate_get_ns_a_public1_internal_string() {
|
|
return get_ns_a_public1_internal_string();
|
|
}
|
|
|
|
|
|
extern "C" const char *get_ns_b_public3_string();
|
|
|
|
extern "C" const char *delegate_get_ns_b_public3_string() {
|
|
return get_ns_b_public3_string();
|
|
}
|