mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-12-03 09:51:53 +00:00
Delay mounting sbin overlay
This commit is contained in:
@@ -26,13 +26,17 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
constexpr const char *init_applet[] =
|
||||
{ "magiskpolicy", "supolicy", "magisk", nullptr };
|
||||
constexpr int (*init_applet_main[])(int, char *[]) =
|
||||
{ magiskpolicy_main, magiskpolicy_main, magisk_proxy_main, nullptr };
|
||||
|
||||
#ifdef MAGISK_DEBUG
|
||||
static FILE *kmsg;
|
||||
static int vprintk(const char *fmt, va_list ap) {
|
||||
fprintf(kmsg, "magiskinit: ");
|
||||
return vfprintf(kmsg, fmt, ap);
|
||||
}
|
||||
|
||||
static void setup_klog() {
|
||||
mknod("/kmsg", S_IFCHR | 0666, makedev(1, 11));
|
||||
int fd = xopen("/kmsg", O_WRONLY | O_CLOEXEC);
|
||||
@@ -46,11 +50,6 @@ static void setup_klog() {
|
||||
#define setup_klog(...)
|
||||
#endif
|
||||
|
||||
constexpr const char *init_applet[] =
|
||||
{ "magiskpolicy", "supolicy", nullptr };
|
||||
constexpr int (*init_applet_main[])(int, char *[]) =
|
||||
{ magiskpolicy_main, magiskpolicy_main, nullptr };
|
||||
|
||||
static bool unxz(int fd, const uint8_t *buf, size_t size) {
|
||||
uint8_t out[8192];
|
||||
xz_crc32_init();
|
||||
@@ -113,6 +112,11 @@ static int dump_manager(const char *path, mode_t mode) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BaseInit::cleanup() {
|
||||
umount("/sys");
|
||||
umount("/proc");
|
||||
}
|
||||
|
||||
void BaseInit::re_exec_init() {
|
||||
LOGD("Re-exec /init\n");
|
||||
cleanup();
|
||||
@@ -121,19 +125,22 @@ void BaseInit::re_exec_init() {
|
||||
}
|
||||
|
||||
void LegacyInit::preset() {
|
||||
full_read("/init", &self.buf, &self.sz);
|
||||
|
||||
LOGD("Reverting /init\n");
|
||||
root = open("/", O_RDONLY | O_CLOEXEC);
|
||||
rename("/.backup/init", "/init");
|
||||
rm_rf("/.backup");
|
||||
}
|
||||
|
||||
void SARInit::preset() {
|
||||
full_read("/init", &self.buf, &self.sz);
|
||||
|
||||
LOGD("Cleaning rootfs\n");
|
||||
root = open("/", O_RDONLY | O_CLOEXEC);
|
||||
frm_rf(root, { "overlay", "proc", "sys" });
|
||||
}
|
||||
|
||||
void BaseInit::start() {
|
||||
void MagiskInit::start() {
|
||||
// Prevent file descriptor confusion
|
||||
mknod("/null", S_IFCHR | 0666, makedev(1, 3));
|
||||
int null = open("/null", O_RDWR | O_CLOEXEC);
|
||||
@@ -144,9 +151,6 @@ void BaseInit::start() {
|
||||
if (null > STDERR_FILENO)
|
||||
close(null);
|
||||
|
||||
full_read("/init", &self.buf, &self.sz);
|
||||
full_read("/.backup/.magisk", &config.buf, &config.sz);
|
||||
|
||||
preset();
|
||||
early_mount();
|
||||
setup_rootfs();
|
||||
|
||||
Reference in New Issue
Block a user