Use standalone magiskpolicy

This commit is contained in:
topjohnwu
2022-03-17 03:15:39 -07:00
parent 69c2f407d6
commit fa8900be65
7 changed files with 27 additions and 34 deletions

View File

@@ -110,7 +110,7 @@ ifdef B_POLICY
include $(CLEAR_VARS)
LOCAL_MODULE := magiskpolicy
LOCAL_STATIC_LIBRARIES := \
libutilx \
libutils \
libsepol
LOCAL_SRC_FILES := \
@@ -122,7 +122,6 @@ LOCAL_SRC_FILES := \
magiskpolicy/statement.cpp
LOCAL_CFLAGS := -DAPPLET_STUB_MAIN=magiskpolicy_main
LOCAL_LDFLAGS := -static
include $(BUILD_EXECUTABLE)
endif

View File

@@ -167,6 +167,11 @@ static bool magisk_env() {
cp_afc(DATABIN "/busybox", buf);
exec_command_async(buf, "--install", "-s", dirname(buf));
if (access(DATABIN "/magiskpolicy", X_OK) == 0) {
sprintf(buf, "%s/magiskpolicy", MAGISKTMP.data());
cp_afc(DATABIN "/magiskpolicy", buf);
}
return true;
}

View File

@@ -513,11 +513,9 @@ public:
xsymlink("./magisk", dest.data());
}
} else {
for (int i = 0; init_applet[i]; ++i) {
string dest = dir_name + "/" + init_applet[i];
VLOGD("create", "./magiskinit", dest.data());
xsymlink("./magiskinit", dest.data());
}
string dest = dir_name + "/supolicy";
VLOGD("create", "./magiskpolicy", dest.data());
xsymlink("./magiskpolicy", dest.data());
}
create_and_mount(MAGISKTMP + "/" + name());
}
@@ -532,13 +530,12 @@ static void inject_magisk_bins(root_node *system) {
// Insert binaries
bin->insert(new magisk_node("magisk"));
bin->insert(new magisk_node("magiskinit"));
bin->insert(new magisk_node("magiskpolicy"));
// Also delete all applets to make sure no modules can override it
for (int i = 0; applet_names[i]; ++i)
delete bin->extract(applet_names[i]);
for (int i = 0; init_applet[i]; ++i)
delete bin->extract(init_applet[i]);
delete bin->extract("supolicy");
}
vector<module_info> *module_list;

View File

@@ -300,17 +300,11 @@ void MagiskInit::setup_tmp(const char *path) {
int fd = xopen(INTLROOT "/config", O_WRONLY | O_CREAT, 0);
xwrite(fd, magisk_cfg.buf, magisk_cfg.sz);
close(fd);
fd = xopen("magiskinit", O_WRONLY | O_CREAT, 0755);
xwrite(fd, self.buf, self.sz);
close(fd);
// The magisk binary will be handled later
// Create applet symlinks
for (int i = 0; applet_names[i]; ++i)
xsymlink("./magisk", applet_names[i]);
xsymlink("./magiskinit", "magiskpolicy");
xsymlink("./magiskinit", "supolicy");
xsymlink("./magiskpolicy", "supolicy");
chdir("/");
}