mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-23 18:15:30 +00:00
Rename rules to preinit
It is possible that we will allow more preinit files for modules. Rename the partition and folders from rules to preinit.
This commit is contained in:
parent
7048aa1014
commit
4e2b88b3d0
@ -43,10 +43,10 @@ data class LocalModule(
|
|||||||
set(enable) {
|
set(enable) {
|
||||||
if (enable) {
|
if (enable) {
|
||||||
disableFile.delete()
|
disableFile.delete()
|
||||||
Shell.cmd("copy_rules").submit()
|
Shell.cmd("copy_preinit_files").submit()
|
||||||
} else {
|
} else {
|
||||||
!disableFile.createNewFile()
|
!disableFile.createNewFile()
|
||||||
Shell.cmd("copy_rules").submit()
|
Shell.cmd("copy_preinit_files").submit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,10 +56,10 @@ data class LocalModule(
|
|||||||
if (remove) {
|
if (remove) {
|
||||||
if (updateFile.exists()) return
|
if (updateFile.exists()) return
|
||||||
removeFile.createNewFile()
|
removeFile.createNewFile()
|
||||||
Shell.cmd("copy_rules").submit()
|
Shell.cmd("copy_preinit_files").submit()
|
||||||
} else {
|
} else {
|
||||||
removeFile.delete()
|
removeFile.delete()
|
||||||
Shell.cmd("copy_rules").submit()
|
Shell.cmd("copy_preinit_files").submit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ class ShellInit : Shell.Initializer() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (shell.isRoot) {
|
if (shell.isRoot) {
|
||||||
add("export MAGISKTMP=\$(magisk --path)/.magisk")
|
add("export MAGISKTMP=\$(magisk --path)")
|
||||||
// Test if we can properly execute stuff in /data
|
// Test if we can properly execute stuff in /data
|
||||||
Info.noDataExec = !shell.newJob().add("$localBB sh -c \"$localBB true\"").exec().isSuccess
|
Info.noDataExec = !shell.newJob().add("$localBB sh -c \"$localBB true\"").exec().isSuccess
|
||||||
}
|
}
|
||||||
@ -49,9 +49,9 @@ class ShellInit : Shell.Initializer() {
|
|||||||
if (Info.noDataExec) {
|
if (Info.noDataExec) {
|
||||||
// Copy it out of /data to workaround Samsung bullshit
|
// Copy it out of /data to workaround Samsung bullshit
|
||||||
add(
|
add(
|
||||||
"if [ -x \$MAGISKTMP/busybox/busybox ]; then",
|
"if [ -x \$MAGISKTMP/.magisk/busybox/busybox ]; then",
|
||||||
" cp -af $localBB \$MAGISKTMP/busybox/busybox",
|
" cp -af $localBB \$MAGISKTMP/.magisk/busybox/busybox",
|
||||||
" exec \$MAGISKTMP/busybox/busybox sh",
|
" exec \$MAGISKTMP/.magisk/busybox/busybox sh",
|
||||||
"else",
|
"else",
|
||||||
" cp -af $localBB /dev/busybox",
|
" cp -af $localBB /dev/busybox",
|
||||||
" exec /dev/busybox sh",
|
" exec /dev/busybox sh",
|
||||||
|
@ -14,7 +14,7 @@ env_check() {
|
|||||||
[ -f "$MAGISKBIN/magiskpolicy" ] || return 1
|
[ -f "$MAGISKBIN/magiskpolicy" ] || return 1
|
||||||
fi
|
fi
|
||||||
if [ "$2" -ge 25210 ]; then
|
if [ "$2" -ge 25210 ]; then
|
||||||
[ -b "$MAGISKTMP/block/rules" ] || return 2
|
[ -b "$MAGISKTMP/.magisk/block/preinit" ] || return 2
|
||||||
fi
|
fi
|
||||||
grep -xqF "MAGISK_VER='$1'" "$MAGISKBIN/util_functions.sh" || return 3
|
grep -xqF "MAGISK_VER='$1'" "$MAGISKBIN/util_functions.sh" || return 3
|
||||||
grep -xqF "MAGISK_VER_CODE=$2" "$MAGISKBIN/util_functions.sh" || return 3
|
grep -xqF "MAGISK_VER_CODE=$2" "$MAGISKBIN/util_functions.sh" || return 3
|
||||||
@ -67,7 +67,7 @@ direct_install() {
|
|||||||
rm -f $1/new-boot.img
|
rm -f $1/new-boot.img
|
||||||
fix_env $1
|
fix_env $1
|
||||||
run_migrations
|
run_migrations
|
||||||
copy_rules
|
copy_preinit_files
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
@ -12,39 +12,28 @@ Magisk will mount a `tmpfs` directory to store some temporary data. For devices
|
|||||||
# Binaries like magisk, magiskinit, and all symlinks to
|
# Binaries like magisk, magiskinit, and all symlinks to
|
||||||
# applets are directly stored in this path. This means when
|
# applets are directly stored in this path. This means when
|
||||||
# this is /sbin, these binaries will be directly in PATH.
|
# this is /sbin, these binaries will be directly in PATH.
|
||||||
MAGISKBASE=$(magisk --path)
|
MAGISKTMP=$(magisk --path)
|
||||||
|
|
||||||
# Magisk internal stuffs
|
# Magisk internal stuffs
|
||||||
MAGISKTMP=$MAGISKBASE/.magisk
|
INTERNALDIR=$MAGISKTMP/.magisk
|
||||||
|
|
||||||
# Magisk's BusyBox directory. Within this folder stores
|
|
||||||
# the busybox binary and symlinks to all of its applets.
|
|
||||||
# Any usage of this directory is deprecated, please
|
|
||||||
# directly call /data/adb/magisk/busybox and use
|
|
||||||
# BusyBox's ASH Standalone mode.
|
|
||||||
# The creation of this path will be removed in the future.
|
|
||||||
$MAGISKTMP/busybox
|
|
||||||
|
|
||||||
# /data/adb/modules will be bind mounted here.
|
# /data/adb/modules will be bind mounted here.
|
||||||
# The original folder is not used due to nosuid mount flag.
|
# The original folder is not used due to nosuid mount flag.
|
||||||
$MAGISKTMP/modules
|
$INTERNALDIR/modules
|
||||||
|
|
||||||
# The current Magisk installation config
|
# The current Magisk installation config
|
||||||
$MAGISKTMP/config
|
$INTERNALDIR/config
|
||||||
|
|
||||||
# Partition mirrors
|
# Partition mirrors
|
||||||
# Each directory in this path will be mounted with the
|
# Each directory in this path will be mounted with the
|
||||||
# partition of its directory name.
|
# partition of its directory name.
|
||||||
# e.g. system, system_ext, vendor, data ...
|
# e.g. system, system_ext, vendor, data ...
|
||||||
$MAGISKTMP/mirror
|
$INTERNALDIR/mirror
|
||||||
|
|
||||||
# Block devices Magisk creates internally to mount mirrors.
|
|
||||||
$MAGISKTMP/block
|
|
||||||
|
|
||||||
# Root directory patch files
|
# Root directory patch files
|
||||||
# On system-as-root devices, / is not writable.
|
# On system-as-root devices, / is not writable.
|
||||||
# All pre-init patched files are stored here and bind mounted.
|
# All pre-init patched files are stored here and bind mounted.
|
||||||
$MAGISKTMP/rootdir
|
$INTERNALDIR/rootdir
|
||||||
```
|
```
|
||||||
|
|
||||||
### Paths in `/data`
|
### Paths in `/data`
|
||||||
|
@ -506,14 +506,14 @@ string find_apk_path(const char *pkg) {
|
|||||||
return path.append("/base.apk");
|
return path.append("/base.apk");
|
||||||
}
|
}
|
||||||
|
|
||||||
string find_rules_dir(const char *base_dir) {
|
string resolve_preinit_dir(const char *base_dir) {
|
||||||
string rules_dir = base_dir;
|
string dir = base_dir;
|
||||||
if (access((rules_dir + "/unencrypted").data(), F_OK) == 0) {
|
if (access((dir + "/unencrypted").data(), F_OK) == 0) {
|
||||||
rules_dir += "/unencrypted/magisk";
|
dir += "/unencrypted/magisk";
|
||||||
} else if (access((rules_dir + "/adb").data(), F_OK) == 0) {
|
} else if (access((dir + "/adb").data(), F_OK) == 0) {
|
||||||
rules_dir += "/adb/modules";
|
dir += "/adb/modules";
|
||||||
} else {
|
} else {
|
||||||
rules_dir += "/magisk";
|
dir += "/magisk";
|
||||||
}
|
}
|
||||||
return rules_dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ void frm_rf(int dirfd);
|
|||||||
void clone_dir(int src, int dest);
|
void clone_dir(int src, int dest);
|
||||||
std::vector<mount_info> parse_mount_info(const char *pid);
|
std::vector<mount_info> parse_mount_info(const char *pid);
|
||||||
std::string find_apk_path(const char *pkg);
|
std::string find_apk_path(const char *pkg);
|
||||||
std::string find_rules_dir(const char *base_dir);
|
std::string resolve_preinit_dir(const char *base_dir);
|
||||||
|
|
||||||
using sFILE = std::unique_ptr<FILE, decltype(&fclose)>;
|
using sFILE = std::unique_ptr<FILE, decltype(&fclose)>;
|
||||||
using sDIR = std::unique_ptr<DIR, decltype(&closedir)>;
|
using sDIR = std::unique_ptr<DIR, decltype(&closedir)>;
|
||||||
|
@ -60,20 +60,20 @@ static void mount_mirrors() {
|
|||||||
restorecon();
|
restorecon();
|
||||||
}
|
}
|
||||||
|
|
||||||
// check and mount rules
|
// Check and mount preinit mirror
|
||||||
if (struct stat st{}; stat((MAGISKTMP + "/" BLOCKDIR "/rules").data(), &st) == 0 && (st.st_mode & S_IFBLK)) {
|
if (struct stat st{}; stat((MAGISKTMP + "/" PREINITDEV).data(), &st) == 0 && (st.st_mode & S_IFBLK)) {
|
||||||
dev_t rules_dev = st.st_rdev;
|
dev_t preinit_dev = st.st_rdev;
|
||||||
for (const auto &info: self_mount_info) {
|
for (const auto &info: self_mount_info) {
|
||||||
if (info.root == "/" && info.device == rules_dev) {
|
if (info.root == "/" && info.device == preinit_dev) {
|
||||||
auto flags = split_ro(info.fs_option, ",");
|
auto flags = split_ro(info.fs_option, ",");
|
||||||
auto rw = std::any_of(flags.begin(), flags.end(), [](const auto &flag) {
|
auto rw = std::any_of(flags.begin(), flags.end(), [](const auto &flag) {
|
||||||
return flag == "rw"sv;
|
return flag == "rw"sv;
|
||||||
});
|
});
|
||||||
if (!rw) continue;
|
if (!rw) continue;
|
||||||
string custom_rules_dir = find_rules_dir(info.target.data());
|
string preinit_dir = resolve_preinit_dir(info.target.data());
|
||||||
xmkdir(custom_rules_dir.data(), 0700);
|
xmkdir(preinit_dir.data(), 0700);
|
||||||
auto rules_dir = MAGISKTMP + "/" RULESDIR;
|
auto mirror_dir = MAGISKTMP + "/" PREINITMIRR;
|
||||||
mount_mirror(custom_rules_dir, rules_dir);
|
mount_mirror(preinit_dir, mirror_dir);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -104,7 +104,7 @@ static void mount_mirrors() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_t find_rules_device() {
|
dev_t find_preinit_device() {
|
||||||
const int UNKNOWN = 0;
|
const int UNKNOWN = 0;
|
||||||
const int PERSIST = 1;
|
const int PERSIST = 1;
|
||||||
const int METADATA = 2;
|
const int METADATA = 2;
|
||||||
@ -113,12 +113,12 @@ dev_t find_rules_device() {
|
|||||||
int matched = UNKNOWN;
|
int matched = UNKNOWN;
|
||||||
dev_t rules_dev = 0;
|
dev_t rules_dev = 0;
|
||||||
bool encrypted = getprop("ro.crypto.state") == "encrypted";
|
bool encrypted = getprop("ro.crypto.state") == "encrypted";
|
||||||
string custom_rules_dir;
|
string preinit_dir;
|
||||||
|
|
||||||
bool mount = getuid() == 0 && getenv("MAGISKTMP");
|
bool mount = getuid() == 0 && getenv("MAGISKTMP");
|
||||||
|
|
||||||
for (const auto &info: parse_mount_info("self")) {
|
for (const auto &info: parse_mount_info("self")) {
|
||||||
if (info.target.ends_with(RULESDIR))
|
if (info.target.ends_with(PREINITMIRR))
|
||||||
return info.device;
|
return info.device;
|
||||||
if (info.root != "/" || info.source.find("/dm-") != string::npos)
|
if (info.root != "/" || info.source.find("/dm-") != string::npos)
|
||||||
continue;
|
continue;
|
||||||
@ -146,17 +146,17 @@ dev_t find_rules_device() {
|
|||||||
} else continue;
|
} else continue;
|
||||||
|
|
||||||
if (mount) {
|
if (mount) {
|
||||||
custom_rules_dir = find_rules_dir(info.target.data());
|
preinit_dir = resolve_preinit_dir(info.target.data());
|
||||||
}
|
}
|
||||||
rules_dev = info.device;
|
rules_dev = info.device;
|
||||||
matched = new_matched;
|
matched = new_matched;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!custom_rules_dir.empty()) {
|
if (!preinit_dir.empty()) {
|
||||||
auto rules_dir = getenv("MAGISKTMP") + "/rules"s;
|
auto mirror_dir = string(getenv("MAGISKTMP")) + "/" PREINITMIRR;
|
||||||
mkdirs(custom_rules_dir.data(), 0700);
|
mkdirs(preinit_dir.data(), 0700);
|
||||||
mkdirs(rules_dir.data(), 0700);
|
mkdirs(mirror_dir.data(), 0700);
|
||||||
xmount(custom_rules_dir.data(), rules_dir.data(), nullptr, MS_BIND, nullptr);
|
xmount(preinit_dir.data(), mirror_dir.data(), nullptr, MS_BIND, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return rules_dev;
|
return rules_dev;
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
extern bool RECOVERY_MODE;
|
extern bool RECOVERY_MODE;
|
||||||
extern std::atomic<ino_t> pkg_xml_ino;
|
extern std::atomic<ino_t> pkg_xml_ino;
|
||||||
|
|
||||||
dev_t find_rules_device();
|
dev_t find_preinit_device();
|
||||||
void unlock_blocks();
|
void unlock_blocks();
|
||||||
void reboot();
|
void reboot();
|
||||||
void start_log_daemon();
|
void start_log_daemon();
|
||||||
|
@ -122,7 +122,6 @@ int magisk_main(int argc, char *argv[]) {
|
|||||||
do_reboot = 1;
|
do_reboot = 1;
|
||||||
} else {
|
} else {
|
||||||
usage();
|
usage();
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
int fd = connect_daemon(MainRequest::REMOVE_MODULES);
|
int fd = connect_daemon(MainRequest::REMOVE_MODULES);
|
||||||
write_int(fd, do_reboot);
|
write_int(fd, do_reboot);
|
||||||
@ -134,8 +133,8 @@ int magisk_main(int argc, char *argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
} else if (argc >= 3 && argv[1] == "--install-module"sv) {
|
} else if (argc >= 3 && argv[1] == "--install-module"sv) {
|
||||||
install_module(argv[2]);
|
install_module(argv[2]);
|
||||||
} else if (argv[1] == "--rules-device"sv) {
|
} else if (argv[1] == "--preinit-device"sv) {
|
||||||
auto dev = find_rules_device();
|
auto dev = find_preinit_device();
|
||||||
if (dev) printf("%u:%u\n", major(dev), minor(dev));
|
if (dev) printf("%u:%u\n", major(dev), minor(dev));
|
||||||
return dev ? 0 : 1;
|
return dev ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
@ -437,7 +437,7 @@ void handle_modules() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int check_rules_dir(char *buf, size_t sz) {
|
static int check_rules_dir(char *buf, size_t sz) {
|
||||||
int off = ssprintf(buf, sz, "%s/%s", MAGISKTMP.data(), RULESDIR);
|
int off = ssprintf(buf, sz, "%s/%s", MAGISKTMP.data(), PREINITMIRR);
|
||||||
struct stat st1{};
|
struct stat st1{};
|
||||||
struct stat st2{};
|
struct stat st2{};
|
||||||
if (xstat(buf, &st1) < 0 || xstat(MODULEROOT, &st2) < 0)
|
if (xstat(buf, &st1) < 0 || xstat(MODULEROOT, &st2) < 0)
|
||||||
|
@ -15,19 +15,20 @@
|
|||||||
#define MAGISKDB SECURE_DIR "/magisk.db"
|
#define MAGISKDB SECURE_DIR "/magisk.db"
|
||||||
|
|
||||||
// tmpfs paths
|
// tmpfs paths
|
||||||
extern std::string MAGISKTMP;
|
extern std::string MAGISKTMP;
|
||||||
#define INTLROOT ".magisk"
|
#define INTLROOT ".magisk"
|
||||||
#define MIRRDIR INTLROOT "/mirror"
|
#define MIRRDIR INTLROOT "/mirror"
|
||||||
#define RULESDIR INTLROOT "/rules"
|
#define PREINITMIRR INTLROOT "/preinit"
|
||||||
#define BLOCKDIR INTLROOT "/block"
|
#define BLOCKDIR INTLROOT "/block"
|
||||||
#define WORKERDIR INTLROOT "/worker"
|
#define PREINITDEV BLOCKDIR "/preinit"
|
||||||
#define MODULEMNT INTLROOT "/modules"
|
#define WORKERDIR INTLROOT "/worker"
|
||||||
#define BBPATH INTLROOT "/busybox"
|
#define MODULEMNT INTLROOT "/modules"
|
||||||
#define ROOTOVL INTLROOT "/rootdir"
|
#define BBPATH INTLROOT "/busybox"
|
||||||
#define SHELLPTS INTLROOT "/pts"
|
#define ROOTOVL INTLROOT "/rootdir"
|
||||||
#define ROOTMNT ROOTOVL "/.mount_list"
|
#define SHELLPTS INTLROOT "/pts"
|
||||||
#define ZYGISKBIN INTLROOT "/zygisk"
|
#define ROOTMNT ROOTOVL "/.mount_list"
|
||||||
#define SELINUXMOCK INTLROOT "/selinux"
|
#define ZYGISKBIN INTLROOT "/zygisk"
|
||||||
|
#define SELINUXMOCK INTLROOT "/selinux"
|
||||||
|
|
||||||
constexpr const char *applet_names[] = { "su", "resetprop", nullptr };
|
constexpr const char *applet_names[] = { "su", "resetprop", nullptr };
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ public:
|
|||||||
|
|
||||||
class MagiskInit : public BaseInit {
|
class MagiskInit : public BaseInit {
|
||||||
private:
|
private:
|
||||||
dev_t rules_dev = 0;
|
dev_t preinit_dev = 0;
|
||||||
|
|
||||||
void parse_config_file();
|
void parse_config_file();
|
||||||
void patch_sepolicy(const char *in, const char *out);
|
void patch_sepolicy(const char *in, const char *out);
|
||||||
|
@ -111,38 +111,40 @@ static void switch_root(const string &path) {
|
|||||||
frm_rf(root);
|
frm_rf(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mount_rules_dir(string path, dev_t rules_dev) {
|
#define PREINITMNT MIRRDIR "/preinit"
|
||||||
if (!rules_dev) return;
|
|
||||||
xmknod(BLOCKDIR "/rules", S_IFBLK | 0600, rules_dev);
|
static void mount_preinit_dir(string path, dev_t preinit_dev) {
|
||||||
xmkdir(MIRRDIR "/rules", 0);
|
if (!preinit_dev) return;
|
||||||
|
xmknod(PREINITDEV, S_IFBLK | 0600, preinit_dev);
|
||||||
|
xmkdir(PREINITMNT, 0);
|
||||||
|
|
||||||
bool mounted = false;
|
bool mounted = false;
|
||||||
// first of all, find if rules dev is already mounted
|
// First, find if it is already mounted
|
||||||
for (auto &info : parse_mount_info("self")) {
|
for (auto &info : parse_mount_info("self")) {
|
||||||
if (info.root == "/" && info.device == rules_dev) {
|
if (info.root == "/" && info.device == preinit_dev) {
|
||||||
// Already mounted, just bind mount
|
// Already mounted, just bind mount
|
||||||
xmount(info.target.data(), MIRRDIR "/rules", nullptr, MS_BIND, nullptr);
|
xmount(info.target.data(), PREINITMNT, nullptr, MS_BIND, nullptr);
|
||||||
mounted = true;
|
mounted = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mounted || mount(BLOCKDIR "/rules", MIRRDIR "/rules", "ext4", MS_RDONLY, nullptr) == 0 ||
|
if (mounted || mount(PREINITDEV, PREINITMNT, "ext4", MS_RDONLY, nullptr) == 0 ||
|
||||||
mount(BLOCKDIR "/rules", MIRRDIR "/rules", "f2fs", MS_RDONLY, nullptr) == 0) {
|
mount(PREINITDEV, PREINITMNT, "f2fs", MS_RDONLY, nullptr) == 0) {
|
||||||
string custom_rules_dir = find_rules_dir(MIRRDIR "/rules");
|
string preinit_dir = resolve_preinit_dir(PREINITMNT);
|
||||||
// Create bind mount
|
// Create bind mount
|
||||||
xmkdirs(RULESDIR, 0);
|
xmkdirs(PREINITMIRR, 0);
|
||||||
if (access(custom_rules_dir.data(), F_OK)) {
|
if (access(preinit_dir.data(), F_OK)) {
|
||||||
LOGW("empty rules: %s\n", custom_rules_dir.data());
|
LOGW("empty preinit: %s\n", preinit_dir.data());
|
||||||
} else {
|
} else {
|
||||||
LOGD("rules: %s\n", custom_rules_dir.data());
|
LOGD("preinit: %s\n", preinit_dir.data());
|
||||||
xmount(custom_rules_dir.data(), RULESDIR, nullptr, MS_BIND, nullptr);
|
xmount(preinit_dir.data(), PREINITMIRR, nullptr, MS_BIND, nullptr);
|
||||||
mount_list.emplace_back(path += "/" RULESDIR);
|
mount_list.emplace_back(path += "/" PREINITMIRR);
|
||||||
}
|
}
|
||||||
xumount2(MIRRDIR "/rules", MNT_DETACH);
|
xumount2(PREINITMNT, MNT_DETACH);
|
||||||
} else {
|
} else {
|
||||||
PLOGE("Failed to mount rules %u:%u", major(rules_dev), minor(rules_dev));
|
PLOGE("Failed to mount rules %u:%u", major(preinit_dev), minor(preinit_dev));
|
||||||
unlink(BLOCKDIR "/rules");
|
unlink(PREINITDEV);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +248,7 @@ void MagiskInit::setup_tmp(const char *path) {
|
|||||||
xmkdir(BLOCKDIR, 0);
|
xmkdir(BLOCKDIR, 0);
|
||||||
xmkdir(WORKERDIR, 0);
|
xmkdir(WORKERDIR, 0);
|
||||||
|
|
||||||
mount_rules_dir(path, rules_dev);
|
mount_preinit_dir(path, preinit_dev);
|
||||||
|
|
||||||
cp_afc(".backup/.magisk", INTLROOT "/config");
|
cp_afc(".backup/.magisk", INTLROOT "/config");
|
||||||
rm_rf(".backup");
|
rm_rf(".backup");
|
||||||
|
@ -185,7 +185,7 @@ static void extract_files(bool sbin) {
|
|||||||
void MagiskInit::parse_config_file() {
|
void MagiskInit::parse_config_file() {
|
||||||
dev_t dev = 0;
|
dev_t dev = 0;
|
||||||
parse_prop_file("/data/.backup/.magisk", [&dev](auto key, auto value) -> bool {
|
parse_prop_file("/data/.backup/.magisk", [&dev](auto key, auto value) -> bool {
|
||||||
if (key == "RULESDEVICE") {
|
if (key == "PREINITDEVICE") {
|
||||||
unsigned int dev_major = 0;
|
unsigned int dev_major = 0;
|
||||||
unsigned int dev_minor = 0;
|
unsigned int dev_minor = 0;
|
||||||
sscanf(value.data(), "%u:%u", &dev_major, &dev_minor);
|
sscanf(value.data(), "%u:%u", &dev_major, &dev_minor);
|
||||||
@ -194,7 +194,7 @@ void MagiskInit::parse_config_file() {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
rules_dev = dev;
|
preinit_dev = dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ROOTMIR MIRRDIR "/system_root"
|
#define ROOTMIR MIRRDIR "/system_root"
|
||||||
|
@ -15,12 +15,12 @@ void MagiskInit::patch_sepolicy(const char *in, const char *out) {
|
|||||||
sepol->magisk_rules();
|
sepol->magisk_rules();
|
||||||
|
|
||||||
// Custom rules
|
// Custom rules
|
||||||
if (auto dir = xopen_dir(RULESDIR)) {
|
if (auto dir = xopen_dir(PREINITMIRR)) {
|
||||||
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
||||||
auto rule = RULESDIR "/"s + entry->d_name + "/sepolicy.rule";
|
auto rule = PREINITMIRR "/"s + entry->d_name + "/sepolicy.rule";
|
||||||
if (xaccess(rule.data(), R_OK) == 0 &&
|
if (xaccess(rule.data(), R_OK) == 0 &&
|
||||||
access((RULESDIR "/"s + entry->d_name + "/disable").data(), F_OK) != 0 &&
|
access((PREINITMIRR "/"s + entry->d_name + "/disable").data(), F_OK) != 0 &&
|
||||||
access((RULESDIR "/"s + entry->d_name + "/remove").data(), F_OK) != 0) {
|
access((PREINITMIRR "/"s + entry->d_name + "/remove").data(), F_OK) != 0) {
|
||||||
LOGD("Loading custom sepolicy patch: [%s]\n", rule.data());
|
LOGD("Loading custom sepolicy patch: [%s]\n", rule.data());
|
||||||
sepol->load_rule_file(rule.data());
|
sepol->load_rule_file(rule.data());
|
||||||
}
|
}
|
||||||
@ -96,12 +96,12 @@ bool MagiskInit::hijack_sepolicy() {
|
|||||||
|
|
||||||
// Read all custom rules into memory
|
// Read all custom rules into memory
|
||||||
string rules;
|
string rules;
|
||||||
if (auto dir = xopen_dir(RULESDIR)) {
|
if (auto dir = xopen_dir(PREINITMIRR)) {
|
||||||
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
||||||
auto rule_file = RULESDIR "/"s + entry->d_name + "/sepolicy.rule";
|
auto rule_file = PREINITMIRR "/"s + entry->d_name + "/sepolicy.rule";
|
||||||
if (xaccess(rule_file.data(), R_OK) == 0 &&
|
if (xaccess(rule_file.data(), R_OK) == 0 &&
|
||||||
access((RULESDIR "/"s + entry->d_name + "/disable").data(), F_OK) != 0 &&
|
access((PREINITMIRR "/"s + entry->d_name + "/disable").data(), F_OK) != 0 &&
|
||||||
access((RULESDIR "/"s + entry->d_name + "/remove").data(), F_OK) != 0) {
|
access((PREINITMIRR "/"s + entry->d_name + "/remove").data(), F_OK) != 0) {
|
||||||
LOGD("Load custom sepolicy patch: [%s]\n", rule_file.data());
|
LOGD("Load custom sepolicy patch: [%s]\n", rule_file.data());
|
||||||
full_read(rule_file.data(), rules);
|
full_read(rule_file.data(), rules);
|
||||||
rules += '\n';
|
rules += '\n';
|
||||||
|
@ -63,9 +63,9 @@ export KEEPFORCEENCRYPT=true
|
|||||||
echo "KEEPVERITY=$KEEPVERITY" > config
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
||||||
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
||||||
if [ -e "/system/bin/linker64" ]; then
|
if [ -e "/system/bin/linker64" ]; then
|
||||||
echo "RULESDEVICE=$(./magisk64 --rules-device)" >> config
|
echo "PREINITDEVICE=$(./magisk64 --preinit-device)" >> config
|
||||||
else
|
else
|
||||||
echo "RULESDEVICE=$(./magisk32 --rules-device)" >> config
|
echo "PREINITDEVICE=$(./magisk32 --preinit-device)" >> config
|
||||||
fi
|
fi
|
||||||
# For API 28, we also patch advancedFeatures.ini to disable SAR
|
# For API 28, we also patch advancedFeatures.ini to disable SAR
|
||||||
# Manually override skip_initramfs by setting RECOVERYMODE=true
|
# Manually override skip_initramfs by setting RECOVERYMODE=true
|
||||||
|
@ -77,7 +77,6 @@ fi
|
|||||||
export KEEPVERITY
|
export KEEPVERITY
|
||||||
export KEEPFORCEENCRYPT
|
export KEEPFORCEENCRYPT
|
||||||
export PATCHVBMETAFLAG
|
export PATCHVBMETAFLAG
|
||||||
export MAGISKTMP
|
|
||||||
|
|
||||||
chmod -R 755 .
|
chmod -R 755 .
|
||||||
|
|
||||||
@ -138,7 +137,7 @@ case $((STATUS & 3)) in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Work around custom legacy Sony /init -> /(s)bin/init_sony : /init.real setup
|
# Workaround custom legacy Sony /init -> /(s)bin/init_sony : /init.real setup
|
||||||
INIT=init
|
INIT=init
|
||||||
if [ $((STATUS & 4)) -ne 0 ]; then
|
if [ $((STATUS & 4)) -ne 0 ]; then
|
||||||
INIT=init.real
|
INIT=init.real
|
||||||
@ -153,24 +152,26 @@ ui_print "- Patching ramdisk"
|
|||||||
# Compress to save precious ramdisk space
|
# Compress to save precious ramdisk space
|
||||||
SKIP32="#"
|
SKIP32="#"
|
||||||
SKIP64="#"
|
SKIP64="#"
|
||||||
if [ -f magisk32 ]; then
|
|
||||||
$BOOTMODE && [ -z "$RULESDEVICE" ] && RULESDEVICE=$(./magisk32 --rules-device)
|
|
||||||
./magiskboot compress=xz magisk32 magisk32.xz
|
|
||||||
unset SKIP32
|
|
||||||
fi
|
|
||||||
if [ -f magisk64 ]; then
|
if [ -f magisk64 ]; then
|
||||||
$BOOTMODE && [ -z "$RULESDEVICE" ] && RULESDEVICE=$(./magisk64 --rules-device)
|
$BOOTMODE && [ -z "$PREINITDEVICE" ] && PREINITDEVICE=$(./magisk64 --preinit-device)
|
||||||
./magiskboot compress=xz magisk64 magisk64.xz
|
./magiskboot compress=xz magisk64 magisk64.xz
|
||||||
unset SKIP64
|
unset SKIP64
|
||||||
fi
|
fi
|
||||||
|
if [ -f magisk32 ]; then
|
||||||
|
$BOOTMODE && [ -z "$PREINITDEVICE" ] && PREINITDEVICE=$(./magisk32 --preinit-device)
|
||||||
|
./magiskboot compress=xz magisk32 magisk32.xz
|
||||||
|
unset SKIP32
|
||||||
|
fi
|
||||||
./magiskboot compress=xz stub.apk stub.xz
|
./magiskboot compress=xz stub.apk stub.xz
|
||||||
|
|
||||||
echo "KEEPVERITY=$KEEPVERITY" > config
|
echo "KEEPVERITY=$KEEPVERITY" > config
|
||||||
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
echo "KEEPFORCEENCRYPT=$KEEPFORCEENCRYPT" >> config
|
||||||
echo "PATCHVBMETAFLAG=$PATCHVBMETAFLAG" >> config
|
echo "PATCHVBMETAFLAG=$PATCHVBMETAFLAG" >> config
|
||||||
echo "RECOVERYMODE=$RECOVERYMODE" >> config
|
echo "RECOVERYMODE=$RECOVERYMODE" >> config
|
||||||
[ -n "$RULESDEVICE" ] && ui_print "- Rules partition device ID: $RULESDEVICE"
|
if [ -n "$PREINITDEVICE" ]; then
|
||||||
[ -n "$RULESDEVICE" ] && echo "RULESDEVICE=$RULESDEVICE" >> config
|
ui_print "- Pre-init storage partition device ID: $PREINITDEVICE"
|
||||||
|
echo "PREINITDEVICE=$PREINITDEVICE" >> config
|
||||||
|
fi
|
||||||
[ -n "$SHA1" ] && echo "SHA1=$SHA1" >> config
|
[ -n "$SHA1" ] && echo "SHA1=$SHA1" >> config
|
||||||
|
|
||||||
./magiskboot cpio ramdisk.cpio \
|
./magiskboot cpio ramdisk.cpio \
|
||||||
|
@ -49,7 +49,7 @@ getvar() {
|
|||||||
local VARNAME=$1
|
local VARNAME=$1
|
||||||
local VALUE
|
local VALUE
|
||||||
local PROPPATH='/data/.magisk /cache/.magisk'
|
local PROPPATH='/data/.magisk /cache/.magisk'
|
||||||
[ ! -z $MAGISKTMP ] && PROPPATH="$MAGISKTMP/config $PROPPATH"
|
[ ! -z $MAGISKTMP ] && PROPPATH="$MAGISKTMP/.magisk/config $PROPPATH"
|
||||||
VALUE=$(grep_prop $VARNAME $PROPPATH)
|
VALUE=$(grep_prop $VARNAME $PROPPATH)
|
||||||
[ ! -z $VALUE ] && eval $VARNAME=\$VALUE
|
[ ! -z $VALUE ] && eval $VARNAME=\$VALUE
|
||||||
}
|
}
|
||||||
@ -629,7 +629,7 @@ run_migrations() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
copy_rules() {
|
copy_preinit_files() {
|
||||||
local RULESDIR=$(magisk --path)/.magisk/rules
|
local RULESDIR=$(magisk --path)/.magisk/rules
|
||||||
if ! grep -q " $RULESDIR " /proc/mounts; then
|
if ! grep -q " $RULESDIR " /proc/mounts; then
|
||||||
ui_print "- Unable to find rules dir"
|
ui_print "- Unable to find rules dir"
|
||||||
@ -785,10 +785,10 @@ install_module() {
|
|||||||
cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop
|
cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Copy over custom rules
|
# Copy over custom sepolicy rules
|
||||||
if [ -f $MODPATH/sepolicy.rule ]; then
|
if [ -f $MODPATH/sepolicy.rule ]; then
|
||||||
ui_print "- Installing custom sepolicy rules"
|
ui_print "- Installing custom sepolicy rules"
|
||||||
copy_rules
|
copy_preinit_files
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove stuff that doesn't belong to modules and clean up any empty directories
|
# Remove stuff that doesn't belong to modules and clean up any empty directories
|
||||||
|
Loading…
Reference in New Issue
Block a user