mirror of
https://github.com/topjohnwu/Magisk
synced 2024-11-12 19:15:23 +01: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 char partname[32];
|
||||
static char fstype[32];
|
||||
static char block_dev[64];
|
||||
|
||||
static void parse_device(devinfo *dev, const char *uevent) {
|
||||
dev->partname[0] = '\0';
|
||||
parse_prop_file(uevent, [=](string_view key, string_view value) -> bool {
|
||||
if (key == "MAJOR")
|
||||
dev->major = atoi(value.data());
|
||||
dev->major = parse_int(value.data());
|
||||
else if (key == "MINOR")
|
||||
dev->minor = atoi(value.data());
|
||||
dev->minor = parse_int(value.data());
|
||||
else if (key == "DEVNAME")
|
||||
strcpy(dev->devname, value.data());
|
||||
else if (key == "PARTNAME")
|
||||
@ -53,7 +57,7 @@ static void collect_devices() {
|
||||
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())
|
||||
collect_devices();
|
||||
for (;;) {
|
||||
@ -84,15 +88,7 @@ static bool is_lnk(const char *name) {
|
||||
return S_ISLNK(st.st_mode);
|
||||
}
|
||||
|
||||
void BaseInit::cleanup() {
|
||||
// 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) {
|
||||
static bool read_dt_fstab(cmdline *cmd, const char *name) {
|
||||
char path[128];
|
||||
int fd;
|
||||
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;
|
||||
}
|
||||
|
||||
static char partname[32];
|
||||
static char fstype[32];
|
||||
static char block_dev[64];
|
||||
|
||||
#define link_root(name) \
|
||||
if (is_lnk("/system_root" name)) \
|
||||
cp_afc("/system_root" name, 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"); \
|
||||
setup_block(partname, block_dev); \
|
||||
setup_block(block_dev); \
|
||||
xmkdir("/" #name, 0755); \
|
||||
xmount(block_dev, "/" #name, fstype, MS_RDONLY, nullptr); \
|
||||
mount_list.emplace_back("/" #name); \
|
||||
@ -151,7 +143,7 @@ void SARCompatInit::early_mount() {
|
||||
|
||||
LOGD("Early mount system_root\n");
|
||||
sprintf(partname, "system%s", cmd->slot);
|
||||
setup_block(partname, block_dev);
|
||||
setup_block(block_dev);
|
||||
xmkdir("/system_root", 0755);
|
||||
if (xmount(block_dev, "/system_root", "ext4", 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");
|
||||
sprintf(partname, "system%s", cmd->slot);
|
||||
system_dev = setup_block(partname);
|
||||
system_dev = setup_block();
|
||||
xmkdir("/system_root", 0755);
|
||||
if (xmount("/dev/root", "/system_root", "ext4", MS_RDONLY, nullptr))
|
||||
xmount("/dev/root", "/system_root", "erofs", MS_RDONLY, nullptr);
|
||||
@ -245,3 +237,11 @@ void SecondStageInit::early_mount() {
|
||||
|
||||
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;
|
||||
|
||||
virtual void early_mount() = 0;
|
||||
bool read_dt_fstab(const char *name, char *partname, char *fstype);
|
||||
bool patch_sepolicy(const char *file = "/sepolicy");
|
||||
public:
|
||||
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) {
|
||||
char buf[1024];
|
||||
int rc = syscall(__NR_getxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||
if (rc < 0) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
*ctx = strdup(buf);
|
||||
if (rc == 0)
|
||||
*ctx = strdup(buf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __lgetfilecon(const char *path, char **ctx) {
|
||||
char buf[1024];
|
||||
int rc = syscall(__NR_lgetxattr, path, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||
if (rc < 0) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
*ctx = strdup(buf);
|
||||
if (rc == 0)
|
||||
*ctx = strdup(buf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __fgetfilecon(int fd, char **ctx) {
|
||||
char buf[1024];
|
||||
int rc = syscall(__NR_fgetxattr, fd, XATTR_NAME_SELINUX, buf, sizeof(buf) - 1);
|
||||
if (rc < 0) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
*ctx = strdup(buf);
|
||||
if (rc == 0)
|
||||
*ctx = strdup(buf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int __setfilecon(const char *path, const char *ctx) {
|
||||
int rc = syscall(__NR_setxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
if (rc) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
return syscall(__NR_setxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
}
|
||||
|
||||
static int __lsetfilecon(const char *path, const char *ctx) {
|
||||
int rc = syscall(__NR_lsetxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
if (rc) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
return syscall(__NR_lsetxattr, path, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
}
|
||||
|
||||
static int __fsetfilecon(int fd, const char *ctx) {
|
||||
int rc = syscall(__NR_fsetxattr, fd, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
if (rc) {
|
||||
errno = -rc;
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
return syscall(__NR_fsetxattr, fd, XATTR_NAME_SELINUX, ctx, strlen(ctx) + 1, 0);
|
||||
}
|
||||
|
||||
// Function pointers
|
||||
|
Loading…
Reference in New Issue
Block a user