diff --git a/zygiskd/src/root_impl/magisk.c b/zygiskd/src/root_impl/magisk.c index 9f4e364..ee5d48b 100644 --- a/zygiskd/src/root_impl/magisk.c +++ b/zygiskd/src/root_impl/magisk.c @@ -30,53 +30,36 @@ char *magisk_managers[] = { enum magisk_variants variant = Official; /* INFO: Longest path */ -static char path_to_magisk[sizeof(DEBUG_RAMDISK_MAGISK)]; +static char path_to_magisk[sizeof(DEBUG_RAMDISK_MAGISK)] = { 0 }; bool is_using_sulist = false; void magisk_get_existence(struct root_impl_state *state) { - struct stat s; - if (stat(SBIN_MAGISK, &s) != 0) { - if (errno != ENOENT) { - LOGE("Failed to stat Magisk /sbin/magisk binary: %s\n", strerror(errno)); - } - errno = 0; + const char *magisk_files[] = { + SBIN_MAGISK, + BITLESS_SBIN_MAGISK, + DEBUG_RAMDISK_MAGISK, + BITLESS_DEBUG_RAMDISK_MAGISK + }; - if (stat(BITLESS_SBIN_MAGISK, &s) != 0) { + for (size_t i = 0; i < sizeof(magisk_files) / sizeof(magisk_files[0]); i++) { + if (access(magisk_files[i], F_OK) != 0) { if (errno != ENOENT) { - LOGE("Failed to stat Magisk %s binary: %s\n", BITLESS_SBIN_MAGISK, strerror(errno)); + LOGE("Failed to access Magisk binary: %s\n", strerror(errno)); } errno = 0; - if (stat(DEBUG_RAMDISK_MAGISK, &s) != 0) { - if (errno != ENOENT) { - LOGE("Failed to stat Magisk %s binary: %s\n", DEBUG_RAMDISK_MAGISK, strerror(errno)); - } - errno = 0; - - if (stat(BITLESS_DEBUG_RAMDISK_MAGISK, &s) != 0) { - if (errno != ENOENT) { - LOGE("Failed to stat Magisk /debug_ramdisk/magisk binary: %s\n", strerror(errno)); - } - errno = 0; - - state->state = Inexistent; - - return; - } - - /* INFO: /debug_ramdisk/magisk64 (or 32) doesn't exist but /debug_ramdisk/magisk does */ - strcpy(path_to_magisk, BITLESS_DEBUG_RAMDISK_MAGISK); - } else { - /* INFO: /sbin/magisk doesn't exist but /debug_ramdisk/magisk does */ - strcpy(path_to_magisk, DEBUG_RAMDISK_MAGISK); - } - } else { - /* INFO: /sbin/magisk64 (or 32) doesn't exist but /sbin/magisk does */ - strcpy(path_to_magisk, BITLESS_SBIN_MAGISK); + continue; } - } else { - /* INFO: /sbin/magisk64 (or 32) exists */ - strcpy(path_to_magisk, SBIN_MAGISK); + + strcpy(path_to_magisk, magisk_files[i]); + + break; + } + + if (path_to_magisk[0] == '\0') { + state->state = Inexistent; + + return; } char *argv[4] = { "magisk", "-v", NULL, NULL };