diff --git a/native/jni/core/bootstages.c b/native/jni/core/bootstages.c index 02da85963..284a0225a 100644 --- a/native/jni/core/bootstages.c +++ b/native/jni/core/bootstages.c @@ -468,6 +468,23 @@ void install_apk(const char *apk) { unlink(apk); } +static void *start_magisk_hide(void *args) { + launch_magiskhide(-1); + return NULL; +} + +static void auto_start_magiskhide() { + if (!check_and_start_logger()) + return; + char *hide_prop = getprop2(MAGISKHIDE_PROP, 1); + if (hide_prop == NULL || strcmp(hide_prop, "0") != 0) { + pthread_t thread; + xpthread_create(&thread, NULL, start_magisk_hide, NULL); + pthread_detach(thread); + } + free(hide_prop); +} + /**************** * Entry points * ****************/ @@ -804,6 +821,8 @@ void late_start(int client) { if (buf == NULL) buf = xmalloc(PATH_MAX); if (buf2 == NULL) buf2 = xmalloc(PATH_MAX); + auto_start_magiskhide(); + if (full_patch_pid > 0) { // Wait till the full patch is done waitpid(full_patch_pid, NULL, 0); diff --git a/native/jni/core/daemon.c b/native/jni/core/daemon.c index a701be7e7..c6e4d4e10 100644 --- a/native/jni/core/daemon.c +++ b/native/jni/core/daemon.c @@ -93,22 +93,6 @@ static void *request_handler(void *args) { return NULL; } - -static void *start_magisk_hide(void *args) { - launch_magiskhide(-1); - return NULL; -} - -void auto_start_magiskhide() { - char *hide_prop = getprop2(MAGISKHIDE_PROP, 1); - if (hide_prop == NULL || strcmp(hide_prop, "0") != 0) { - pthread_t thread; - xpthread_create(&thread, NULL, start_magisk_hide, NULL); - pthread_detach(thread); - } - free(hide_prop); -} - void main_daemon() { setsid(); setcon("u:r:"SEPOL_PROC_DOMAIN":s0"); @@ -121,13 +105,7 @@ void main_daemon() { close(fd); // Start the log monitor - loggable = exec_command_sync("/system/bin/logcat", "-d", "-f", "/dev/null", NULL) == 0; - chmod("/dev/null", 0666); - if (loggable) { - connect_daemon2(LOG_DAEMON, &fd); - write_int(fd, HANDSHAKE); - close(fd); - } + check_and_start_logger(); struct sockaddr_un sun; fd = setup_socket(&sun, MAIN_DAEMON); diff --git a/native/jni/core/log_daemon.c b/native/jni/core/log_daemon.c index 4f06eaede..81571205e 100644 --- a/native/jni/core/log_daemon.c +++ b/native/jni/core/log_daemon.c @@ -15,7 +15,7 @@ #include "utils.h" #include "daemon.h" -int loggable = 1; +static int loggable = 0; static struct vector log_cmd, clear_cmd; static int sockfd; static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; @@ -106,6 +106,20 @@ static void *logcat_thread(void *args) { } } +int check_and_start_logger() { + if (!loggable) { + int fd; + loggable = exec_command_sync("/system/bin/logcat", "-d", "-f", "/dev/null", NULL) == 0; + chmod("/dev/null", 0666); + if (loggable) { + connect_daemon2(LOG_DAEMON, &fd); + write_int(fd, HANDSHAKE); + close(fd); + } + } + return loggable; +} + void log_daemon() { setsid(); struct sockaddr_un sun; diff --git a/native/jni/include/daemon.h b/native/jni/include/daemon.h index 2f12b7d26..31c81aa48 100644 --- a/native/jni/include/daemon.h +++ b/native/jni/include/daemon.h @@ -51,12 +51,11 @@ typedef enum { void main_daemon(); int connect_daemon(); int connect_daemon2(daemon_t d, int *sockfd); -void auto_start_magiskhide(); // log_monitor.c -extern int loggable; void log_daemon(); +int check_and_start_logger(); // socket.c diff --git a/native/jni/include/magiskrc.h b/native/jni/include/magiskrc.h index 964d7c1ac..7ef6e5cdc 100644 --- a/native/jni/include/magiskrc.h +++ b/native/jni/include/magiskrc.h @@ -5,11 +5,8 @@ const char magiskrc[] = // Triggers -"on post-fs\n" -" start logd\n" -"\n" - "on post-fs-data\n" +" start logd\n" " load_persist_props\n" " rm "UNBLOCKFILE"\n" " start magisk_startup\n" diff --git a/native/jni/magiskhide/magiskhide.c b/native/jni/magiskhide/magiskhide.c index c3901bba6..ce09a1b18 100644 --- a/native/jni/magiskhide/magiskhide.c +++ b/native/jni/magiskhide/magiskhide.c @@ -45,7 +45,7 @@ void launch_magiskhide(int client) { return; } - if (!loggable) { + if (!check_and_start_logger()) { if (client > 0) { write_int(client, LOGCAT_DISABLED); close(client);