mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-25 03:18:18 +00:00
Mount proper system_root mirror in magiskd
This commit is contained in:
parent
16e4c67992
commit
89fff4830b
@ -26,17 +26,20 @@ static bool safe_mode = false;
|
|||||||
#define SETMIR(b, part) sprintf(b, "%s/" MIRRDIR "/" #part, MAGISKTMP.data())
|
#define SETMIR(b, part) sprintf(b, "%s/" MIRRDIR "/" #part, MAGISKTMP.data())
|
||||||
#define SETBLK(b, part) sprintf(b, "%s/" BLOCKDIR "/" #part, MAGISKTMP.data())
|
#define SETBLK(b, part) sprintf(b, "%s/" BLOCKDIR "/" #part, MAGISKTMP.data())
|
||||||
|
|
||||||
#define mount_mirror(part, flag) \
|
#define do_mount_mirror(part, flag) {\
|
||||||
else if (MNT_DIR_IS("/" #part) && me->mnt_type != "tmpfs"sv && lstat(me->mnt_dir, &st) == 0) { \
|
SETMIR(buf1, part); \
|
||||||
SETMIR(buf1, part); \
|
SETBLK(buf2, part); \
|
||||||
SETBLK(buf2, part); \
|
unlink(buf2); \
|
||||||
unlink(buf2); \
|
mknod(buf2, S_IFBLK | 0600, st.st_dev); \
|
||||||
mknod(buf2, S_IFBLK | 0600, st.st_dev); \
|
xmkdir(buf1, 0755); \
|
||||||
xmkdir(buf1, 0755); \
|
xmount(buf2, buf1, me->mnt_type, flag, nullptr); \
|
||||||
xmount(buf2, buf1, me->mnt_type, flag, nullptr); \
|
LOGI("mount: %s\n", buf1); \
|
||||||
LOGI("mount: %s\n", buf1); \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define mount_mirror(part, flag) \
|
||||||
|
else if (MNT_DIR_IS("/" #part) && me->mnt_type != "tmpfs"sv && lstat(me->mnt_dir, &st) == 0) \
|
||||||
|
do_mount_mirror(part, flag)
|
||||||
|
|
||||||
#define link_mirror(part) \
|
#define link_mirror(part) \
|
||||||
SETMIR(buf1, part); \
|
SETMIR(buf1, part); \
|
||||||
if (access("/system/" #part, F_OK) == 0 && access(buf1, F_OK) != 0) { \
|
if (access("/system/" #part, F_OK) == 0 && access(buf1, F_OK) != 0) { \
|
||||||
@ -119,10 +122,17 @@ static bool magisk_env() {
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
SETMIR(buf1, system);
|
SETMIR(buf1, system);
|
||||||
SETMIR(buf2, system_root);
|
if (access(buf1, F_OK) != 0) {
|
||||||
if (access(buf1, F_OK) != 0 && access(buf2, F_OK) == 0) {
|
|
||||||
xsymlink("./system_root/system", buf1);
|
xsymlink("./system_root/system", buf1);
|
||||||
LOGI("link: %s\n", buf1);
|
LOGI("link: %s\n", buf1);
|
||||||
|
parse_mnt("/proc/mounts", [&](mntent *me) {
|
||||||
|
struct stat st;
|
||||||
|
if (MNT_DIR_IS("/") && me->mnt_type != "rootfs"sv && stat("/", &st) == 0) {
|
||||||
|
do_mount_mirror(system_root, MS_RDONLY)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
link_mirror(vendor)
|
link_mirror(vendor)
|
||||||
link_mirror(product)
|
link_mirror(product)
|
||||||
|
@ -183,13 +183,12 @@ static void magic_mount(const string &sdir, const string &ddir = "") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define ROOTMIR MIRRDIR "/system_root"
|
#define ROOTMIR MIRRDIR "/system_root"
|
||||||
#define ROOTBLK BLOCKDIR "/system_root"
|
|
||||||
#define MONOPOLICY "/sepolicy"
|
#define MONOPOLICY "/sepolicy"
|
||||||
#define LIBSELINUX "/system/" LIBNAME "/libselinux.so"
|
#define LIBSELINUX "/system/" LIBNAME "/libselinux.so"
|
||||||
#define NEW_INITRC "/system/etc/init/hw/init.rc"
|
#define NEW_INITRC "/system/etc/init/hw/init.rc"
|
||||||
|
|
||||||
void SARBase::patch_rootdir() {
|
void SARBase::patch_rootdir() {
|
||||||
char tmp_dir[16];
|
char tmp_dir[32];
|
||||||
const char *sepol;
|
const char *sepol;
|
||||||
|
|
||||||
char *p;
|
char *p;
|
||||||
@ -208,13 +207,10 @@ void SARBase::patch_rootdir() {
|
|||||||
mount_rules_dir(BLOCKDIR, MIRRDIR);
|
mount_rules_dir(BLOCKDIR, MIRRDIR);
|
||||||
|
|
||||||
// Mount system_root mirror
|
// Mount system_root mirror
|
||||||
struct stat st;
|
|
||||||
xstat("/", &st);
|
|
||||||
xmkdir(ROOTMIR, 0755);
|
xmkdir(ROOTMIR, 0755);
|
||||||
mknod(ROOTBLK, S_IFBLK | 0600, st.st_dev);
|
xmount("/", ROOTMIR, nullptr, MS_BIND, nullptr);
|
||||||
strcpy(p, "/" ROOTBLK);
|
strcpy(p, "/" ROOTMIR);
|
||||||
if (xmount(tmp_dir, ROOTMIR, "ext4", MS_RDONLY, nullptr))
|
mount_list.emplace_back(tmp_dir);
|
||||||
xmount(tmp_dir, ROOTMIR, "erofs", MS_RDONLY, nullptr);
|
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
// Recreate original sbin structure if necessary
|
// Recreate original sbin structure if necessary
|
||||||
|
Loading…
x
Reference in New Issue
Block a user