Adjust the daemon for Pixel support
This commit is contained in:
parent
518f3d229f
commit
7a376c9efc
@ -314,7 +314,11 @@ static void clone_skeleton(struct node_entry *node) {
|
|||||||
if (IS_LNK(child)) {
|
if (IS_LNK(child)) {
|
||||||
// Copy symlinks directly
|
// Copy symlinks directly
|
||||||
cp_afc(buf2, buf);
|
cp_afc(buf2, buf);
|
||||||
LOGI("cplink: %s -> %s\n", buf2, buf);
|
#ifdef MAGISK_DEBUG
|
||||||
|
LOGD("cplink: %s -> %s\n",buf2, buf);
|
||||||
|
#else
|
||||||
|
LOGI("cplink: %s\n", buf);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
snprintf(buf, PATH_MAX, "%s/%s", full_path, child->name);
|
snprintf(buf, PATH_MAX, "%s/%s", full_path, child->name);
|
||||||
bind_mount(buf2, buf);
|
bind_mount(buf2, buf);
|
||||||
@ -394,12 +398,26 @@ static void mount_mirrors() {
|
|||||||
vec_init(&mounts);
|
vec_init(&mounts);
|
||||||
file_to_vector("/proc/mounts", &mounts);
|
file_to_vector("/proc/mounts", &mounts);
|
||||||
char *line;
|
char *line;
|
||||||
|
int skip_initramfs = 0;
|
||||||
|
// Check whether skip_initramfs device
|
||||||
vec_for_each(&mounts, line) {
|
vec_for_each(&mounts, line) {
|
||||||
if (strstr(line, " /system ")) {
|
if (strstr(line, " /system_root ")) {
|
||||||
|
xmkdir_p(MIRRDIR "/system", 0755);
|
||||||
|
bind_mount("/system_root/system", MIRRDIR "/system");
|
||||||
|
skip_initramfs = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vec_for_each(&mounts, line) {
|
||||||
|
if (!skip_initramfs && strstr(line, " /system ")) {
|
||||||
sscanf(line, "%s", buf);
|
sscanf(line, "%s", buf);
|
||||||
xmkdir_p(MIRRDIR "/system", 0755);
|
xmkdir_p(MIRRDIR "/system", 0755);
|
||||||
xmount(buf, MIRRDIR "/system", "ext4", MS_RDONLY, NULL);
|
xmount(buf, MIRRDIR "/system", "ext4", MS_RDONLY, NULL);
|
||||||
LOGI("mount: %s -> %s\n", buf, MIRRDIR "/system");
|
#ifdef MAGISK_DEBUG
|
||||||
|
LOGD("mount: %s -> %s\n", buf, MIRRDIR "/system");
|
||||||
|
#else
|
||||||
|
LOGI("mount: %s\n", MIRRDIR "/system");
|
||||||
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (strstr(line, " /vendor ")) {
|
if (strstr(line, " /vendor ")) {
|
||||||
@ -407,14 +425,22 @@ static void mount_mirrors() {
|
|||||||
sscanf(line, "%s", buf);
|
sscanf(line, "%s", buf);
|
||||||
xmkdir_p(MIRRDIR "/vendor", 0755);
|
xmkdir_p(MIRRDIR "/vendor", 0755);
|
||||||
xmount(buf, MIRRDIR "/vendor", "ext4", MS_RDONLY, NULL);
|
xmount(buf, MIRRDIR "/vendor", "ext4", MS_RDONLY, NULL);
|
||||||
LOGI("mount: %s -> %s\n", buf, MIRRDIR "/vendor");
|
#ifdef MAGISK_DEBUG
|
||||||
|
LOGD("mount: %s -> %s\n", buf, MIRRDIR "/vendor");
|
||||||
|
#else
|
||||||
|
LOGI("mount: %s\n", MIRRDIR "/vendor");
|
||||||
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
vec_deep_destroy(&mounts);
|
vec_deep_destroy(&mounts);
|
||||||
if (!seperate_vendor) {
|
if (!seperate_vendor) {
|
||||||
symlink(MIRRDIR "/system/vendor", MIRRDIR "/vendor");
|
symlink(MIRRDIR "/system/vendor", MIRRDIR "/vendor");
|
||||||
LOGI("link: %s -> %s\n", MIRRDIR "/system/vendor", MIRRDIR "/vendor");
|
#ifdef MAGISK_DEBUG
|
||||||
|
LOGD("link: %s -> %s\n", MIRRDIR "/system/vendor", MIRRDIR "/vendor");
|
||||||
|
#else
|
||||||
|
LOGI("link: %s\n", MIRRDIR "/vendor");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
mkdir_p(MIRRDIR "/bin", 0755);
|
mkdir_p(MIRRDIR "/bin", 0755);
|
||||||
bind_mount(DATABIN, MIRRDIR "/bin");
|
bind_mount(DATABIN, MIRRDIR "/bin");
|
||||||
@ -503,9 +529,6 @@ void post_fs(int client) {
|
|||||||
// Error handler
|
// Error handler
|
||||||
err_handler = unblock_boot_process;
|
err_handler = unblock_boot_process;
|
||||||
|
|
||||||
// Start log monitor
|
|
||||||
monitor_logs();
|
|
||||||
|
|
||||||
LOGI("** post-fs mode running\n");
|
LOGI("** post-fs mode running\n");
|
||||||
// ack
|
// ack
|
||||||
write_int(client, 0);
|
write_int(client, 0);
|
||||||
@ -536,6 +559,9 @@ void post_fs_data(int client) {
|
|||||||
if (!check_data())
|
if (!check_data())
|
||||||
goto unblock;
|
goto unblock;
|
||||||
|
|
||||||
|
// Start log monitor
|
||||||
|
monitor_logs();
|
||||||
|
|
||||||
#ifdef MAGISK_DEBUG
|
#ifdef MAGISK_DEBUG
|
||||||
// Start debug logs in new process
|
// Start debug logs in new process
|
||||||
debug_log_fd = xopen(DEBUG_LOG, O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, 0644);
|
debug_log_fd = xopen(DEBUG_LOG, O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, 0644);
|
||||||
@ -569,10 +595,6 @@ void post_fs_data(int client) {
|
|||||||
link_busybox();
|
link_busybox();
|
||||||
|
|
||||||
// Merge images
|
// Merge images
|
||||||
if (merge_img("/cache/magisk.img", MAINIMG)) {
|
|
||||||
LOGE("Image merge %s -> %s failed!\n", "/cache/magisk.img", MAINIMG);
|
|
||||||
goto unblock;
|
|
||||||
}
|
|
||||||
if (merge_img("/data/magisk_merge.img", MAINIMG)) {
|
if (merge_img("/data/magisk_merge.img", MAINIMG)) {
|
||||||
LOGE("Image merge %s -> %s failed!\n", "/data/magisk_merge.img", MAINIMG);
|
LOGE("Image merge %s -> %s failed!\n", "/data/magisk_merge.img", MAINIMG);
|
||||||
goto unblock;
|
goto unblock;
|
||||||
|
@ -134,7 +134,7 @@ void start_daemon(int client) {
|
|||||||
close(client);
|
close(client);
|
||||||
xsetsid();
|
xsetsid();
|
||||||
setcon("u:r:su:s0");
|
setcon("u:r:su:s0");
|
||||||
umask(022);
|
umask(0);
|
||||||
int fd = xopen("/dev/null", O_RDWR | O_CLOEXEC);
|
int fd = xopen("/dev/null", O_RDWR | O_CLOEXEC);
|
||||||
xdup2(fd, STDIN_FILENO);
|
xdup2(fd, STDIN_FILENO);
|
||||||
xdup2(fd, STDOUT_FILENO);
|
xdup2(fd, STDOUT_FILENO);
|
||||||
@ -171,7 +171,6 @@ void start_daemon(int client) {
|
|||||||
create_links(NULL, "/sbin");
|
create_links(NULL, "/sbin");
|
||||||
xchmod("/sbin", 0755);
|
xchmod("/sbin", 0755);
|
||||||
xmkdir("/magisk", 0755);
|
xmkdir("/magisk", 0755);
|
||||||
xchmod("/magisk", 0755);
|
|
||||||
xmount(NULL, "/", NULL, MS_REMOUNT | MS_RDONLY, NULL);
|
xmount(NULL, "/", NULL, MS_REMOUNT | MS_RDONLY, NULL);
|
||||||
|
|
||||||
// Loop forever to listen for requests
|
// Loop forever to listen for requests
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
static int zygote_num;
|
static int zygote_num;
|
||||||
static char init_ns[32], zygote_ns[2][32], cache_block[256];
|
static char init_ns[32], zygote_ns[2][32], cache_block[256];
|
||||||
static int log_pid, log_fd, target_pid;
|
static int log_pid, log_fd, target_pid, has_cache = 1;
|
||||||
static char *buffer;
|
static char *buffer;
|
||||||
|
|
||||||
// Workaround for the lack of pthread_cancel
|
// Workaround for the lack of pthread_cancel
|
||||||
@ -101,20 +101,30 @@ static void hide_daemon(int pid) {
|
|||||||
file_to_vector(buffer, &mount_list);
|
file_to_vector(buffer, &mount_list);
|
||||||
|
|
||||||
// Find the cache block name if not found yet
|
// Find the cache block name if not found yet
|
||||||
if (cache_block[0] == '\0') {
|
if (has_cache && cache_block[0] == '\0') {
|
||||||
vec_for_each(&mount_list, line) {
|
vec_for_each(&mount_list, line) {
|
||||||
if (strstr(line, " /cache ")) {
|
if (strstr(line, " /cache ")) {
|
||||||
sscanf(line, "%256s", cache_block);
|
sscanf(line, "%256s", cache_block);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (strlen(cache_block) == 0)
|
||||||
|
has_cache = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// First unmount dummy skeletons, /sbin links, cache mounts, and mirrors
|
// Unmout cache mounts
|
||||||
|
if (has_cache) {
|
||||||
vec_for_each(&mount_list, line) {
|
vec_for_each(&mount_list, line) {
|
||||||
if (strstr(line, "tmpfs /system") || strstr(line, "tmpfs /vendor") || strstr(line, "tmpfs /sbin")
|
if (strstr(line, cache_block) && (strstr(line, " /system/") || strstr(line, " /vendor/"))) {
|
||||||
|| (strstr(line, cache_block) && (strstr(line, " /system") || strstr(line, " /vendor")))
|
sscanf(line, "%*s %4096s", buffer);
|
||||||
|| strstr(line, MIRRDIR)) {
|
lazy_unmount(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmount dummy skeletons, /sbin links, and mirrors
|
||||||
|
vec_for_each(&mount_list, line) {
|
||||||
|
if (strstr(line, "tmpfs /system") || strstr(line, "tmpfs /vendor") || strstr(line, "tmpfs /sbin") || strstr(line, MIRRDIR)) {
|
||||||
sscanf(line, "%*s %4096s", buffer);
|
sscanf(line, "%*s %4096s", buffer);
|
||||||
lazy_unmount(buffer);
|
lazy_unmount(buffer);
|
||||||
}
|
}
|
||||||
|
@ -196,8 +196,7 @@ void unlock_blocks() {
|
|||||||
while((entry = readdir(dir))) {
|
while((entry = readdir(dir))) {
|
||||||
if (entry->d_type == DT_BLK &&
|
if (entry->d_type == DT_BLK &&
|
||||||
strstr(entry->d_name, "ram") == NULL &&
|
strstr(entry->d_name, "ram") == NULL &&
|
||||||
strstr(entry->d_name, "loop") == NULL &&
|
strstr(entry->d_name, "loop") == NULL) {
|
||||||
strstr(entry->d_name, "dm-0") == NULL) {
|
|
||||||
snprintf(path, sizeof(path), "%s/%s", DEV_BLOCK, entry->d_name);
|
snprintf(path, sizeof(path), "%s/%s", DEV_BLOCK, entry->d_name);
|
||||||
if ((fd = xopen(path, O_RDONLY)) < 0)
|
if ((fd = xopen(path, O_RDONLY)) < 0)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
Reference in New Issue
Block a user