Commit bb67a837 authored by topjohnwu's avatar topjohnwu

Adjust class structures

parent 6cde6951
......@@ -115,6 +115,12 @@ void LegacyInit::early_mount() {
char fstype[32];
char block_dev[64];
full_read("/init", &self.buf, &self.sz);
LOGD("Reverting /init\n");
root = xopen("/", O_RDONLY | O_CLOEXEC);
rename("/.backup/init", "/init");
mount_root(system);
mount_root(vendor);
mount_root(product);
......@@ -126,6 +132,12 @@ void SARCompatInit::early_mount() {
char fstype[32];
char block_dev[64];
full_read("/init", &self.buf, &self.sz);
LOGD("Cleaning rootfs\n");
root = xopen("/", O_RDONLY | O_CLOEXEC);
frm_rf(root, { ".backup", "overlay", "proc", "sys" });
LOGD("Early mount system_root\n");
sprintf(partname, "system%s", cmd->slot);
setup_block(partname, block_dev);
......@@ -164,6 +176,14 @@ static void switch_root(const string &path) {
void SARInit::early_mount() {
char partname[32];
full_read("/init", &self.buf, &self.sz);
full_read("/.backup/.magisk", &config.buf, &config.sz);
LOGD("Cleaning rootfs\n");
int root = xopen("/", O_RDONLY | O_CLOEXEC);
frm_rf(root, { "proc", "sys" });
close(root);
LOGD("Early mount system_root\n");
sprintf(partname, "system%s", cmd->slot);
system_dev = setup_block(partname);
......
......@@ -124,40 +124,13 @@ void BaseInit::re_exec_init() {
exit(1);
}
void LegacyInit::preset() {
full_read("/init", &self.buf, &self.sz);
LOGD("Reverting /init\n");
root = open("/", O_RDONLY | O_CLOEXEC);
rename("/.backup/init", "/init");
}
void SARInit::preset() {
full_read("/init", &self.buf, &self.sz);
full_read("/.backup/.magisk", &config.buf, &config.sz);
LOGD("Cleaning rootfs\n");
root = open("/", O_RDONLY | O_CLOEXEC);
frm_rf(root, { "proc", "sys" });
}
void SARCompatInit::preset() {
full_read("/init", &self.buf, &self.sz);
LOGD("Cleaning rootfs\n");
root = open("/", O_RDONLY | O_CLOEXEC);
frm_rf(root, { ".backup", "overlay", "proc", "sys" });
}
void RootFSInit::start() {
preset();
early_mount();
setup_rootfs();
re_exec_init();
}
void SARInit::start() {
preset();
early_mount();
patch_rootdir();
re_exec_init();
......@@ -178,8 +151,8 @@ class TestInit : public SARInit {
public:
TestInit(char *argv[], cmdline *cmd) : SARInit(argv, cmd) {};
void start() override {
preset();
early_mount();
patch_rootdir();
cleanup();
}
};
......
......@@ -26,13 +26,11 @@ public:
class MagiskInit : public BaseInit {
protected:
raw_data self{};
int root = -1;
bool mnt_system = false;
bool mnt_vendor = false;
bool mnt_product = false;
bool mnt_odm = false;
virtual void preset() = 0;
virtual void early_mount() = 0;
bool read_dt_fstab(const char *name, char *partname, char *fstype);
bool patch_sepolicy();
......@@ -46,7 +44,6 @@ protected:
raw_data config{};
dev_t system_dev;
void preset() override;
void early_mount() override;
void patch_rootdir();
public:
......@@ -56,7 +53,9 @@ public:
class RootFSInit : public MagiskInit {
protected:
void setup_rootfs();
int root = -1;
virtual void setup_rootfs();
public:
RootFSInit(char *argv[], cmdline *cmd) : MagiskInit(argv, cmd) {};
void start() override;
......@@ -64,7 +63,6 @@ public:
class LegacyInit : public RootFSInit {
protected:
void preset() override;
void early_mount() override;
public:
LegacyInit(char *argv[], cmdline *cmd) : RootFSInit(argv, cmd) {};
......@@ -72,8 +70,8 @@ public:
class SARCompatInit : public RootFSInit {
protected:
void preset() override;
void early_mount() override;
void setup_rootfs() override;
public:
SARCompatInit(char *argv[], cmdline *cmd) : RootFSInit(argv, cmd) {};
};
......
......@@ -40,14 +40,6 @@ constexpr const char wrapper[] =
;
void RootFSInit::setup_rootfs() {
if (cmd->system_as_root) {
// Clone rootfs
LOGD("Clone root dir from system to rootfs\n");
int system_root = xopen("/system_root", O_RDONLY | O_CLOEXEC);
clone_dir(system_root, root, false);
close(system_root);
}
if (patch_sepolicy()) {
constexpr char SYSTEM_INIT[] = "/system/bin/init";
// If init is symlink, copy it to rootfs so we can patch
......@@ -131,6 +123,16 @@ void RootFSInit::setup_rootfs() {
close(fd);
}
void SARCompatInit::setup_rootfs() {
// Clone rootfs
LOGD("Clone root dir from system to rootfs\n");
int system_root = xopen("/system_root", O_RDONLY | O_CLOEXEC);
clone_dir(system_root, root, false);
close(system_root);
RootFSInit::setup_rootfs();
}
bool MagiskInit::patch_sepolicy() {
bool patch_init = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment