parent
afe3c2bc1b
commit
0783f3d5b6
@ -234,16 +234,20 @@ void MagiskInit::mount_rules_dir(const char *dev_base, const char *mnt_base) {
|
|||||||
goto cache;
|
goto cache;
|
||||||
|
|
||||||
strcpy(p, "/data/unencrypted");
|
strcpy(p, "/data/unencrypted");
|
||||||
if (access(path, F_OK) == 0) {
|
if (xaccess(path, F_OK) == 0) {
|
||||||
// FBE, need to use an unencrypted path
|
// FBE, need to use an unencrypted path
|
||||||
custom_rules_dir = path + "/magisk"s;
|
custom_rules_dir = path + "/magisk"s;
|
||||||
} else {
|
} else {
|
||||||
// Skip if /data/adb does not exist
|
// Skip if /data/adb does not exist
|
||||||
strcpy(p, "/data/adb");
|
strcpy(p, SECURE_DIR);
|
||||||
if (access(path, F_OK) != 0)
|
if (xaccess(path, F_OK) != 0)
|
||||||
return;
|
return;
|
||||||
|
strcpy(p, MODULEROOT);
|
||||||
|
if (xaccess(path, F_OK) != 0) {
|
||||||
|
goto cache;
|
||||||
|
}
|
||||||
// Unencrypted, directly use module paths
|
// Unencrypted, directly use module paths
|
||||||
custom_rules_dir = string(mnt_base) + MODULEROOT;
|
custom_rules_dir = string(path);
|
||||||
}
|
}
|
||||||
goto success;
|
goto success;
|
||||||
|
|
||||||
|
@ -100,10 +100,10 @@ bool MagiskInit::patch_sepolicy(const char *file) {
|
|||||||
|
|
||||||
// Custom rules
|
// Custom rules
|
||||||
if (!custom_rules_dir.empty()) {
|
if (!custom_rules_dir.empty()) {
|
||||||
if (auto dir = open_dir(custom_rules_dir.data())) {
|
if (auto dir = xopen_dir(custom_rules_dir.data())) {
|
||||||
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
for (dirent *entry; (entry = xreaddir(dir.get()));) {
|
||||||
auto rule = custom_rules_dir + "/" + entry->d_name + "/sepolicy.rule";
|
auto rule = custom_rules_dir + "/" + entry->d_name + "/sepolicy.rule";
|
||||||
if (access(rule.data(), R_OK) == 0) {
|
if (xaccess(rule.data(), R_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());
|
||||||
}
|
}
|
||||||
|
@ -272,6 +272,14 @@ int xpthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
|||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int xaccess(const char *path, int mode) {
|
||||||
|
int ret = access(path, mode);
|
||||||
|
if (ret < 0) {
|
||||||
|
PLOGE("access %s", path);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
int xstat(const char *pathname, struct stat *buf) {
|
int xstat(const char *pathname, struct stat *buf) {
|
||||||
int ret = stat(pathname, buf);
|
int ret = stat(pathname, buf);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -33,6 +33,7 @@ ssize_t xsendmsg(int sockfd, const struct msghdr *msg, int flags);
|
|||||||
ssize_t xrecvmsg(int sockfd, struct msghdr *msg, int flags);
|
ssize_t xrecvmsg(int sockfd, struct msghdr *msg, int flags);
|
||||||
int xpthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
int xpthread_create(pthread_t *thread, const pthread_attr_t *attr,
|
||||||
void *(*start_routine) (void *), void *arg);
|
void *(*start_routine) (void *), void *arg);
|
||||||
|
int xaccess(const char *path, int mode);
|
||||||
int xstat(const char *pathname, struct stat *buf);
|
int xstat(const char *pathname, struct stat *buf);
|
||||||
int xlstat(const char *pathname, struct stat *buf);
|
int xlstat(const char *pathname, struct stat *buf);
|
||||||
int xfstat(int fd, struct stat *buf);
|
int xfstat(int fd, struct stat *buf);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user