mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-04-16 11:31:24 +00:00
Some minor changes
This commit is contained in:
parent
474d65207e
commit
8cc5f096a2
@ -20,13 +20,17 @@ struct devinfo {
|
|||||||
|
|
||||||
static vector<devinfo> dev_list;
|
static vector<devinfo> dev_list;
|
||||||
|
|
||||||
|
static char partname[32];
|
||||||
|
static char fstype[32];
|
||||||
|
static char block_dev[64];
|
||||||
|
|
||||||
static void parse_device(devinfo *dev, const char *uevent) {
|
static void parse_device(devinfo *dev, const char *uevent) {
|
||||||
dev->partname[0] = '\0';
|
dev->partname[0] = '\0';
|
||||||
parse_prop_file(uevent, [=](string_view key, string_view value) -> bool {
|
parse_prop_file(uevent, [=](string_view key, string_view value) -> bool {
|
||||||
if (key == "MAJOR")
|
if (key == "MAJOR")
|
||||||
dev->major = atoi(value.data());
|
dev->major = parse_int(value.data());
|
||||||
else if (key == "MINOR")
|
else if (key == "MINOR")
|
||||||
dev->minor = atoi(value.data());
|
dev->minor = parse_int(value.data());
|
||||||
else if (key == "DEVNAME")
|
else if (key == "DEVNAME")
|
||||||
strcpy(dev->devname, value.data());
|
strcpy(dev->devname, value.data());
|
||||||
else if (key == "PARTNAME")
|
else if (key == "PARTNAME")
|
||||||
@ -53,7 +57,7 @@ static void collect_devices() {
|
|||||||
closedir(dir);
|
closedir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
static dev_t setup_block(const char *partname, char *block_dev = nullptr) {
|
static dev_t setup_block(char *block_dev = nullptr) {
|
||||||
if (dev_list.empty())
|
if (dev_list.empty())
|
||||||
collect_devices();
|
collect_devices();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -84,15 +88,7 @@ static bool is_lnk(const char *name) {
|
|||||||
return S_ISLNK(st.st_mode);
|
return S_ISLNK(st.st_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseInit::cleanup() {
|
static bool read_dt_fstab(cmdline *cmd, const char *name) {
|
||||||
// Unmount in reverse order
|
|
||||||
for (auto &p : reversed(mount_list)) {
|
|
||||||
LOGD("Unmount [%s]\n", p.data());
|
|
||||||
umount(p.data());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MagiskInit::read_dt_fstab(const char *name, char *partname, char *fstype) {
|
|
||||||
char path[128];
|
char path[128];
|
||||||
int fd;
|
int fd;
|
||||||
sprintf(path, "%s/fstab/%s/dev", cmd->dt_dir, name);
|
sprintf(path, "%s/fstab/%s/dev", cmd->dt_dir, name);
|
||||||
@ -112,18 +108,14 @@ bool MagiskInit::read_dt_fstab(const char *name, char *partname, char *fstype) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char partname[32];
|
|
||||||
static char fstype[32];
|
|
||||||
static char block_dev[64];
|
|
||||||
|
|
||||||
#define link_root(name) \
|
#define link_root(name) \
|
||||||
if (is_lnk("/system_root" name)) \
|
if (is_lnk("/system_root" name)) \
|
||||||
cp_afc("/system_root" name, name)
|
cp_afc("/system_root" name, name)
|
||||||
|
|
||||||
#define mount_root(name) \
|
#define mount_root(name) \
|
||||||
if (!is_lnk("/" #name) && read_dt_fstab(#name, partname, fstype)) { \
|
if (!is_lnk("/" #name) && read_dt_fstab(cmd, #name)) { \
|
||||||
LOGD("Early mount " #name "\n"); \
|
LOGD("Early mount " #name "\n"); \
|
||||||
setup_block(partname, block_dev); \
|
setup_block(block_dev); \
|
||||||
xmkdir("/" #name, 0755); \
|
xmkdir("/" #name, 0755); \
|
||||||
xmount(block_dev, "/" #name, fstype, MS_RDONLY, nullptr); \
|
xmount(block_dev, "/" #name, fstype, MS_RDONLY, nullptr); \
|
||||||
mount_list.emplace_back("/" #name); \
|
mount_list.emplace_back("/" #name); \
|
||||||
@ -151,7 +143,7 @@ void SARCompatInit::early_mount() {
|
|||||||
|
|
||||||
LOGD("Early mount system_root\n");
|
LOGD("Early mount system_root\n");
|
||||||
sprintf(partname, "system%s", cmd->slot);
|
sprintf(partname, "system%s", cmd->slot);
|
||||||
setup_block(partname, block_dev);
|
setup_block(block_dev);
|
||||||
xmkdir("/system_root", 0755);
|
xmkdir("/system_root", 0755);
|
||||||
if (xmount(block_dev, "/system_root", "ext4", MS_RDONLY, nullptr))
|
if (xmount(block_dev, "/system_root", "ext4", MS_RDONLY, nullptr))
|
||||||
xmount(block_dev, "/system_root", "erofs", MS_RDONLY, nullptr);
|
xmount(block_dev, "/system_root", "erofs", MS_RDONLY, nullptr);
|
||||||
@ -213,7 +205,7 @@ void SARInit::early_mount() {
|
|||||||
|
|
||||||
LOGD("Early mount system_root\n");
|
LOGD("Early mount system_root\n");
|
||||||
sprintf(partname, "system%s", cmd->slot);
|
sprintf(partname, "system%s", cmd->slot);
|
||||||
system_dev = setup_block(partname);
|
system_dev = setup_block();
|
||||||
xmkdir("/system_root", 0755);
|
xmkdir("/system_root", 0755);
|
||||||
if (xmount("/dev/root", "/system_root", "ext4", MS_RDONLY, nullptr))
|
if (xmount("/dev/root", "/system_root", "ext4", MS_RDONLY, nullptr))
|
||||||
xmount("/dev/root", "/system_root", "erofs", MS_RDONLY, nullptr);
|
xmount("/dev/root", "/system_root", "erofs", MS_RDONLY, nullptr);
|
||||||
@ -245,3 +237,11 @@ void SecondStageInit::early_mount() {
|
|||||||
|
|
||||||
switch_root("/system_root");
|
switch_root("/system_root");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseInit::cleanup() {
|
||||||
|
// Unmount in reverse order
|
||||||
|
for (auto &p : reversed(mount_list)) {
|
||||||
|
LOGD("Unmount [%s]\n", p.data());
|
||||||
|
umount(p.data());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -55,7 +55,6 @@ protected:
|
|||||||
raw_data self;
|
raw_data self;
|
||||||
|
|
||||||
virtual void early_mount() = 0;
|
virtual void early_mount() = 0;
|
||||||
bool read_dt_fstab(const char *name, char *partname, char *fstype);
|
|
||||||
bool patch_sepolicy(const char *file = "/sepolicy");
|
bool patch_sepolicy(const char *file = "/sepolicy");
|
||||||
public:
|
public:
|
||||||
MagiskInit(char *argv[], cmdline *cmd) : BaseInit(argv, cmd) {};
|
MagiskInit(char *argv[], cmdline *cmd) : BaseInit(argv, cmd) {};
|
||||||
|
@ -55,61 +55,37 @@ static int __setcon(const char *ctx) {
|
|||||||
static int __getfilecon(const char *path, char **ctx) {
|
static int __getfilecon(const char *path, char **ctx) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int rc = syscall(__NR_getxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
int rc = syscall(__NR_getxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||||
if (rc < 0) {
|
if (rc == 0)
|
||||||
errno = -rc;
|
*ctx = strdup(buf);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*ctx = strdup(buf);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __lgetfilecon(const char *path, char **ctx) {
|
static int __lgetfilecon(const char *path, char **ctx) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int rc = syscall(__NR_lgetxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
int rc = syscall(__NR_lgetxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||||
if (rc < 0) {
|
if (rc == 0)
|
||||||
errno = -rc;
|
*ctx = strdup(buf);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*ctx = strdup(buf);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __fgetfilecon(int fd, char **ctx) {
|
static int __fgetfilecon(int fd, char **ctx) {
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
int rc = syscall(__NR_fgetxattr, fd, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
int rc = syscall(__NR_fgetxattr, fd, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||||
if (rc < 0) {
|
if (rc == 0)
|
||||||
errno = -rc;
|
*ctx = strdup(buf);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*ctx = strdup(buf);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __setfilecon(const char *path, const char *ctx) {
|
static int __setfilecon(const char *path, const char *ctx) {
|
||||||
int rc = syscall(__NR_setxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
return syscall(__NR_setxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||||
if (rc) {
|
|
||||||
errno = -rc;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __lsetfilecon(const char *path, const char *ctx) {
|
static int __lsetfilecon(const char *path, const char *ctx) {
|
||||||
int rc = syscall(__NR_lsetxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
return syscall(__NR_lsetxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||||
if (rc) {
|
|
||||||
errno = -rc;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __fsetfilecon(int fd, const char *ctx) {
|
static int __fsetfilecon(int fd, const char *ctx) {
|
||||||
int rc = syscall(__NR_fsetxattr, fd, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
return syscall(__NR_fsetxattr, fd, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||||
if (rc) {
|
|
||||||
errno = -rc;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Function pointers
|
// Function pointers
|
||||||
|
Loading…
x
Reference in New Issue
Block a user