OSDN Git Service

libhardware: load with dlopen if the library is in system.
authorJustin Yun <justinyun@google.com>
Tue, 23 May 2017 07:30:43 +0000 (16:30 +0900)
committerJustin Yun <justinyun@google.com>
Fri, 26 May 2017 02:45:51 +0000 (11:45 +0900)
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)

hardware.c

index 37b61c4..8faac07 100644 (file)
@@ -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");