diff --git a/daemon/src/main/java/org/lsposed/lspd/service/Dex2OatService.java b/daemon/src/main/java/org/lsposed/lspd/service/Dex2OatService.java index 627f17afb..6a12fdeed 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/Dex2OatService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/Dex2OatService.java @@ -50,6 +50,8 @@ public class Dex2OatService implements Runnable { private static final String TAG = "LSPosedDex2Oat"; private static final String WRAPPER32 = "bin/dex2oat32"; private static final String WRAPPER64 = "bin/dex2oat64"; + private static final String HOOKER32 = "bin/liboat_hook32.so"; + private static final String HOOKER64 = "bin/liboat_hook64.so"; private final String[] dex2oatArray = new String[6]; private final FileDescriptor[] fdArray = new FileDescriptor[6]; @@ -186,6 +188,8 @@ public void run() { SELinux.setFileContext(WRAPPER64, xposed_file); setSockCreateContext("u:r:installd:s0"); } + SELinux.setFileContext(HOOKER32, xposed_file); + SELinux.setFileContext(HOOKER64, xposed_file); try (var server = new LocalServerSocket(sockPath)) { setSockCreateContext(null); while (true) { diff --git a/dex2oat/src/main/cpp/dex2oat.c b/dex2oat/src/main/cpp/dex2oat.c index b3b530243..7a8b0f44d 100644 --- a/dex2oat/src/main/cpp/dex2oat.c +++ b/dex2oat/src/main/cpp/dex2oat.c @@ -131,11 +131,15 @@ int main(int argc, char **argv) { putenv((char *)libenv); } - // Set LD_PRELOAD to load liboat_hook.so - const int STRING_BUFFER = 50; - char env_str[STRING_BUFFER]; - snprintf(env_str, STRING_BUFFER, "LD_PRELOAD=/proc/%d/fd/%d", getpid(), hooker_fd); - putenv(env_str); + if (hooker_fd > 0) { + // Set LD_PRELOAD to load liboat_hook.so + const int STRING_BUFFER = 50; + char env_str[STRING_BUFFER]; + snprintf(env_str, STRING_BUFFER, "LD_PRELOAD=/proc/%d/fd/%d", getpid(), hooker_fd); + putenv(env_str); + } else { + LOGE("Unable to read liboat_hook.so"); + } fexecve(stock_fd, (char **)new_argv, environ);