More fail proof to magiskinit
This commit is contained in:
parent
39a6bd33ce
commit
742dc137ed
@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#define _GNU_SOURCE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@ -385,7 +386,6 @@ static void magisk_init_daemon() {
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
@ -403,6 +403,14 @@ int main(int argc, char *argv[]) {
|
|||||||
return dump_magiskrc(argv[3], 0755);
|
return dump_magiskrc(argv[3], 0755);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent file descriptor confusion
|
||||||
|
mknod("/null", S_IFCHR | 0666, makedev(1, 3));
|
||||||
|
int null = open("/null", O_RDWR | O_CLOEXEC);
|
||||||
|
unlink("/null");
|
||||||
|
dup3(null, STDIN_FILENO, O_CLOEXEC);
|
||||||
|
dup3(null, STDOUT_FILENO, O_CLOEXEC);
|
||||||
|
dup3(null, STDERR_FILENO, O_CLOEXEC);
|
||||||
|
|
||||||
// Extract and link files
|
// Extract and link files
|
||||||
mkdir("/overlay", 0000);
|
mkdir("/overlay", 0000);
|
||||||
dump_magiskrc("/overlay/init.magisk.rc", 0750);
|
dump_magiskrc("/overlay/init.magisk.rc", 0750);
|
||||||
@ -456,24 +464,26 @@ int main(int argc, char *argv[]) {
|
|||||||
link("/.backup/init", "/init");
|
link("/.backup/init", "/init");
|
||||||
}
|
}
|
||||||
|
|
||||||
int overlay = open("/overlay", O_RDONLY | O_CLOEXEC);
|
// Only patch initramfs if not intended to run in recovery (legacy devices)
|
||||||
mv_dir(overlay, root);
|
if (access("/etc/recovery.fstab", F_OK) != 0) {
|
||||||
|
int overlay = open("/overlay", O_RDONLY | O_CLOEXEC);
|
||||||
|
mv_dir(overlay, root);
|
||||||
|
|
||||||
// Clean up
|
// Clean up
|
||||||
rmdir("/overlay");
|
rmdir("/overlay");
|
||||||
close(overlay);
|
close(overlay);
|
||||||
close(root);
|
close(root);
|
||||||
|
|
||||||
patch_ramdisk();
|
patch_ramdisk();
|
||||||
patch_sepolicy();
|
patch_sepolicy();
|
||||||
|
|
||||||
umount("/vendor");
|
if (fork_dont_care() == 0) {
|
||||||
|
strcpy(argv[0], "magiskinit");
|
||||||
if (fork_dont_care() == 0) {
|
magisk_init_daemon();
|
||||||
strcpy(argv[0], "magiskinit");
|
}
|
||||||
magisk_init_daemon();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
umount("/vendor");
|
||||||
// Finally, give control back!
|
// Finally, give control back!
|
||||||
execv("/init", argv);
|
execv("/init", argv);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user