diff options
author | neo.chae <neo.chae@lge.com> | 2016-10-04 11:00:27 +0900 |
---|---|---|
committer | Dimitry Ivanov <dimitry@google.com> | 2016-10-05 03:15:49 -0700 |
commit | 2589f9de6473a2030594e2c5e95541f00eb2dc7a (patch) | |
tree | a47afc3b1fea48a1eb789a05aa589ad13196cbb3 /linker/linker.cpp | |
parent | d11d1e4a97699af49f6f5b21a4ed0ed91575af52 (diff) |
Fix for default library path "/vendor/lib"
Android N restrict which libraries C/C++ code
can link against at runtime.
If device has a vendor partition
then /system/vendor symlink to /vendor.
Otherwise /vendor symlink to /system/vendor.
But is_system_library() is only checking /vendor/lib.
It will return false for /system/vendor/lib path.
It is need to add a real path to default library path.
Similarily, default ld library path is already checking.
parse_LD_LIBRARY_PATH()->parse_path()->resolve_paths()
Test: build bionic and run bionic-unit-tests
Bug: http://b/31919547
Change-Id: Ie6777e2b02729948ce77a94de32343d40358bf2c
Signed-off-by: Hyangseok Chae <neo.chae@lge.com>
Diffstat (limited to 'linker/linker.cpp')
-rw-r--r-- | linker/linker.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/linker/linker.cpp b/linker/linker.cpp index fab64bc1c..b2e8dbc11 100644 --- a/linker/linker.cpp +++ b/linker/linker.cpp @@ -3215,9 +3215,14 @@ void init_default_namespace() { g_default_ld_paths = kDefaultLdPaths; } + char real_path[PATH_MAX]; std::vector<std::string> ld_default_paths; for (size_t i = 0; g_default_ld_paths[i] != nullptr; ++i) { - ld_default_paths.push_back(g_default_ld_paths[i]); + if (realpath(g_default_ld_paths[i], real_path) != nullptr) { + ld_default_paths.push_back(real_path); + } else { + ld_default_paths.push_back(g_default_ld_paths[i]); + } } g_default_namespace.set_default_library_paths(std::move(ld_default_paths)); |