diff --git a/jni/daemon/bootstages.c b/jni/daemon/bootstages.c index 64b1fc317..733d859ea 100644 --- a/jni/daemon/bootstages.c +++ b/jni/daemon/bootstages.c @@ -489,6 +489,7 @@ void post_fs_data(int client) { debug_log_fd = xopen(DEBUG_LOG, O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, 0644); char *const command[] = { "logcat", "-v", "brief", NULL }; debug_log_pid = run_command(0, &debug_log_fd, "/system/bin/logcat", command); + close(debug_log_fd); #endif LOGI("** post-fs-data mode running\n"); @@ -776,6 +777,5 @@ void late_start(int client) { // Stop recording the boot logcat after every boot task is done kill(debug_log_pid, SIGTERM); waitpid(debug_log_pid, NULL, 0); - close(debug_log_fd); #endif } diff --git a/jni/daemon/log_monitor.c b/jni/daemon/log_monitor.c index d7a90deef..48c3cfa14 100644 --- a/jni/daemon/log_monitor.c +++ b/jni/daemon/log_monitor.c @@ -31,7 +31,10 @@ static void *logger_thread(void *args) { if (log_pid > 0) waitpid(log_pid, NULL, 0); // For some reason it went here, clear buffer and restart - system("logcat -c"); + char *const restart[] = { "logcat", "-c", NULL }; + log_pid = run_command(0, NULL, "/system/bin/logcat", restart); + if (log_pid > 0) + waitpid(log_pid, NULL, 0); } // Should never be here, but well... diff --git a/jni/magiskhide/proc_monitor.c b/jni/magiskhide/proc_monitor.c index 3601bf980..c3d8d2335 100644 --- a/jni/magiskhide/proc_monitor.c +++ b/jni/magiskhide/proc_monitor.c @@ -180,7 +180,10 @@ void proc_monitor() { while (1) { // Clear previous logcat buffer - system("logcat -b events -c"); + char *const restart[] = { "logcat", "-b", "events", "-c", NULL }; + log_pid = run_command(0, NULL, "/system/bin/logcat", restart); + if (log_pid > 0) + waitpid(log_pid, NULL, 0); // Monitor am_proc_start char *const command[] = { "logcat", "-b", "events", "-v", "raw", "-s", "am_proc_start", NULL }; @@ -269,6 +272,5 @@ void proc_monitor() { kill(log_pid, SIGTERM); waitpid(log_pid, NULL, 0); close(log_fd); - log_pid = 0; } } diff --git a/jni/utils/misc.c b/jni/utils/misc.c index 58d7fef0a..2c1f1ba3c 100644 --- a/jni/utils/misc.c +++ b/jni/utils/misc.c @@ -232,8 +232,6 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) { if (xpipe2(pipefd, O_CLOEXEC) == -1) return -1; writeEnd = pipefd[1]; - // Give the read end of the pipe - *fd = pipefd[0]; } else { writeEnd = *fd; } @@ -241,7 +239,11 @@ int run_command(int err, int *fd, const char *path, char *const argv[]) { int pid = fork(); if (pid != 0) { - close(writeEnd); + if (fd && *fd < 0) { + // Give the read end and close write end + *fd = pipefd[0]; + close(pipefd[1]); + } return pid; }