Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 576662ab authored by Steven Moreland's avatar Steven Moreland
Browse files

libbinder: allow libbinder_ndk + libbinder.vendor

Due to messed up fuzzing linker namespaces, which are being fixed,
when fuzzers are configured as:
   - vendor: true,
   - shared_libs: [... "libbinder_ndk" ...],

then the runtime libraries used are like this:
   - /data/fuzz/x86_64/lib/vendor/libbinder.so
   - /system/lib64/libbinder_ndk.so

This is not a correct configuration. However, we can change the
way openDeclaredPassthroughHal is disabled in order to provide
the same ELF-level interface (that libbinder_ndk expects) from
libbinder as libbinder.vendor.

Future considertions:
- very soon, we need to remove this implicit requirement on the
  dependencies of ll-ndk libraries, by fixing fuzzer linker
  namespaces
- vendors should be able to dlopen same-process stable C HALs, as
  system can, but this requires additional apexd APIs available
  to vendor

Bugs: me
Test: run all service fuzzers, no startup crashes
Change-Id: Icf09de3ca048b542d7c22e6f4ca030977be3dff4
parent e2f79abe
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -247,8 +247,11 @@ bool checkPermission(const String16& permission, pid_t pid, uid_t uid, bool logP
    }
}

#endif //__ANDROID_VNDK__

void* openDeclaredPassthroughHal(const String16& interface, const String16& instance, int flag) {
#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__) && !defined(__ANDROID_NATIVE_BRIDGE__)
#if defined(__ANDROID__) && !defined(__ANDROID_VENDOR__) && !defined(__ANDROID_RECOVERY__) && \
        !defined(__ANDROID_NATIVE_BRIDGE__)
    sp<IServiceManager> sm = defaultServiceManager();
    String16 name = interface + String16("/") + instance;
    if (!sm->isDeclared(name)) {
@@ -268,8 +271,6 @@ void* openDeclaredPassthroughHal(const String16& interface, const String16& inst
#endif
}

#endif //__ANDROID_VNDK__

// ----------------------------------------------------------------------

ServiceManagerShim::ServiceManagerShim(const sp<AidlServiceManager>& impl) {