summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Yun <justinyun@google.com>2017-05-23 16:30:43 +0900
committerJustin Yun <justinyun@google.com>2017-05-26 11:45:51 +0900
commita6ff1a46987a138fd611f25d15022eb06e2bdaaf (patch)
treeb3ae0c88c7c437c16d7d8b017a2b53909a2bcbab
parent5aa83c0c094a26e2a51baac56534d2f29cee4d34 (diff)
downloadlibhardware-a6ff1a46987a138fd611f25d15022eb06e2bdaaf.tar.gz
libhardware: load with dlopen if the library is in system.
Originally, it is not allowed to open non-sphal libraries if the device has sphal namespace. However, some system processes are still using libhardware to load non-sphal libraries. Since it has no harm to allow system libraries to be loaded by libhardware, this patch loads the library from the default namespace if the library is located in system partition. Bug: 38435840 Test: sailfish builds and boots Change-Id: I206da11a2656559fcd0995d32dbd73621a79a683 Merged-In: I206da11a2656559fcd0995d32dbd73621a79a683 (cherry picked from commit c571709b287469bea052b4618d3b119ff1794883)
-rw-r--r--hardware.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/hardware.c b/hardware.c
index 37b61c44..8faac074 100644
--- a/hardware.c
+++ b/hardware.c
@@ -82,7 +82,14 @@ static int load(const char *id,
* dlopen returns. Since RTLD_GLOBAL is not or'd in with
* RTLD_NOW the external symbols will not be global
*/
- handle = android_load_sphal_library(path, RTLD_NOW);
+ if (strncmp(path, "/system/", 8) == 0) {
+ /* If the library is in system partition, no need to check
+ * sphal namespace. Open it with dlopen.
+ */
+ handle = dlopen(path, RTLD_NOW);
+ } else {
+ handle = android_load_sphal_library(path, RTLD_NOW);
+ }
if (handle == NULL) {
char const *err_str = dlerror();
ALOGE("load: module=%s\n%s", path, err_str?err_str:"unknown");