Delay mounting sbin overlay

This commit is contained in:
topjohnwu
2019-06-22 03:14:33 -07:00
parent 120bd6cd68
commit cfec0db947
5 changed files with 131 additions and 75 deletions

View File

@@ -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();