From 1c743839eaaad6b420acad08eda0126c5ecca576 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 11 Jan 2018 03:06:20 +0800 Subject: [PATCH] Add MS_SILENT to xmount and cleanup function wraps --- core/jni/core/daemon.c | 10 +++++----- core/jni/core/magiskinit.c | 16 ++++++++-------- core/jni/include/utils.h | 4 ++-- core/jni/magiskhide/proc_monitor.c | 4 +--- core/jni/utils/file.c | 6 +++--- core/jni/utils/img.c | 4 ++-- core/jni/utils/misc.c | 2 +- core/jni/utils/xwrap.c | 24 ++++-------------------- 8 files changed, 26 insertions(+), 44 deletions(-) diff --git a/core/jni/core/daemon.c b/core/jni/core/daemon.c index f43105e4d..d0ccfa533 100644 --- a/core/jni/core/daemon.c +++ b/core/jni/core/daemon.c @@ -186,7 +186,7 @@ void daemon_init() { // Check whether skip_initramfs device vec_for_each(&mounts, line) { if (strstr(line, " /system_root ")) { - xmkdir_p(MIRRDIR "/system", 0755); + xmkdirs(MIRRDIR "/system", 0755); bind_mount("/system_root/system", MIRRDIR "/system"); skip_initramfs = 1; break; @@ -195,7 +195,7 @@ void daemon_init() { vec_for_each(&mounts, line) { if (!skip_initramfs && strstr(line, " /system ")) { sscanf(line, "%s", buf); - xmkdir_p(MIRRDIR "/system", 0755); + xmkdirs(MIRRDIR "/system", 0755); xmount(buf, MIRRDIR "/system", "ext4", MS_RDONLY, NULL); #ifdef MAGISK_DEBUG LOGI("mount: %s -> %s\n", buf, MIRRDIR "/system"); @@ -205,7 +205,7 @@ void daemon_init() { } else if (strstr(line, " /vendor ")) { seperate_vendor = 1; sscanf(line, "%s", buf); - xmkdir_p(MIRRDIR "/vendor", 0755); + xmkdirs(MIRRDIR "/vendor", 0755); xmount(buf, MIRRDIR "/vendor", "ext4", MS_RDONLY, NULL); #ifdef MAGISK_DEBUG LOGI("mount: %s -> %s\n", buf, MIRRDIR "/vendor"); @@ -224,11 +224,11 @@ void daemon_init() { LOGI("link: %s\n", MIRRDIR "/vendor"); #endif } - xmkdir_p(MIRRDIR "/bin", 0755); + xmkdirs(MIRRDIR "/bin", 0755); bind_mount(DATABIN, MIRRDIR "/bin"); LOGI("* Setting up internal busybox"); - xmkdir_p(BBPATH, 0755); + xmkdirs(BBPATH, 0755); exec_command_sync(MIRRDIR "/bin/busybox", "--install", "-s", BBPATH, NULL); xsymlink(MIRRDIR "/bin/busybox", BBPATH "/busybox"); } diff --git a/core/jni/core/magiskinit.c b/core/jni/core/magiskinit.c index df5bd05d0..17e004ad3 100644 --- a/core/jni/core/magiskinit.c +++ b/core/jni/core/magiskinit.c @@ -77,7 +77,7 @@ static void parse_cmdline(struct cmdline *cmd) { char cmdline[4096]; mkdir("/proc", 0555); - mount("proc", "/proc", "proc", 0, NULL); + xmount("proc", "/proc", "proc", 0, NULL); int fd = open("/proc/cmdline", O_RDONLY | O_CLOEXEC); cmdline[read(fd, cmdline, sizeof(cmdline))] = '\0'; close(fd); @@ -455,7 +455,7 @@ int main(int argc, char *argv[]) { frm_rf(root); mkdir("/sys", 0755); - mount("sysfs", "/sys", "sysfs", 0, NULL); + xmount("sysfs", "/sys", "sysfs", 0, NULL); char partname[32]; snprintf(partname, sizeof(partname), "system%s", cmd.slot); @@ -464,20 +464,20 @@ int main(int argc, char *argv[]) { setup_block(&dev, partname); mkdir("/system_root", 0755); - mount(dev.path, "/system_root", "ext4", MS_RDONLY, NULL); + xmount(dev.path, "/system_root", "ext4", MS_RDONLY, NULL); int system_root = open("/system_root", O_RDONLY | O_CLOEXEC); // Exclude system folder excl_list = (char *[]) { "system", NULL }; clone_dir(system_root, root); mkdir("/system", 0755); - mount("/system_root/system", "/system", NULL, MS_BIND, NULL); + xmount("/system_root/system", "/system", NULL, MS_BIND, NULL); snprintf(partname, sizeof(partname), "vendor%s", cmd.slot); // We need to mount independent vendor partition if (setup_block(&dev, partname) == 0) - mount(dev.path, "/vendor", "ext4", MS_RDONLY, NULL); + xmount(dev.path, "/vendor", "ext4", MS_RDONLY, NULL); close(system_root); } else { @@ -515,13 +515,13 @@ int main(int argc, char *argv[]) { if (patch_sepolicy()) { /* Non skip_initramfs devices using separate sepolicy * Mount /system and try to load again */ - mount("sysfs", "/sys", "sysfs", 0, NULL); + xmount("sysfs", "/sys", "sysfs", 0, NULL); struct device dev; setup_block(&dev, "system"); - mount(dev.path, "/system", "ext4", MS_RDONLY, NULL); + xmount(dev.path, "/system", "ext4", MS_RDONLY, NULL); // We need to mount independent vendor partition if (setup_block(&dev, "vendor") == 0) - mount(dev.path, "/vendor", "ext4", MS_RDONLY, NULL); + xmount(dev.path, "/vendor", "ext4", MS_RDONLY, NULL); patch_sepolicy(); diff --git a/core/jni/include/utils.h b/core/jni/include/utils.h index 0d3ff00cc..7784e03cf 100644 --- a/core/jni/include/utils.h +++ b/core/jni/include/utils.h @@ -61,7 +61,7 @@ int xumount(const char *target); int xumount2(const char *target, int flags); int xrename(const char *oldpath, const char *newpath); int xmkdir(const char *pathname, mode_t mode); -int xmkdir_p(const char *pathname, mode_t mode); +int xmkdirs(const char *pathname, mode_t mode); int xmkdirat(int dirfd, const char *pathname, mode_t mode); void *xmmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); @@ -101,7 +101,7 @@ struct file_attr { }; int fd_getpath(int fd, char *path, size_t size); -int mkdir_p(const char *pathname, mode_t mode); +int mkdirs(const char *pathname, mode_t mode); void in_order_walk(int dirfd, void (*callback)(int, struct dirent*)); void rm_rf(const char *path); void frm_rf(int dirfd); diff --git a/core/jni/magiskhide/proc_monitor.c b/core/jni/magiskhide/proc_monitor.c index 16473a3fa..0e132f7c7 100644 --- a/core/jni/magiskhide/proc_monitor.c +++ b/core/jni/magiskhide/proc_monitor.c @@ -68,10 +68,8 @@ static void store_zygote_ns(int pid) { } static void lazy_unmount(const char* mountpoint) { - if (umount2(mountpoint, MNT_DETACH) != -1) + if (xumount2(mountpoint, MNT_DETACH) != -1) LOGD("hide_daemon: Unmounted (%s)\n", mountpoint); - else - LOGD("hide_daemon: Unmount Failed (%s)\n", mountpoint); } static void hide_daemon(int pid, int ppid) { diff --git a/core/jni/utils/file.c b/core/jni/utils/file.c index 1cb5dcba9..3362c9a6c 100644 --- a/core/jni/utils/file.c +++ b/core/jni/utils/file.c @@ -34,7 +34,7 @@ int fd_getpath(int fd, char *path, size_t size) { return 0; } -int mkdir_p(const char *pathname, mode_t mode) { +int mkdirs(const char *pathname, mode_t mode) { char *path = strdup(pathname), *p; errno = 0; for (p = path + 1; *p; ++p) { @@ -107,7 +107,7 @@ void mv_f(const char *source, const char *destination) { struct file_attr a; if (S_ISDIR(st.st_mode)) { - xmkdir_p(destination, st.st_mode & 0777); + xmkdirs(destination, st.st_mode & 0777); src = xopen(source, O_RDONLY | O_CLOEXEC); dest = xopen(destination, O_RDONLY | O_CLOEXEC); fclone_attr(src, dest); @@ -162,7 +162,7 @@ void cp_afc(const char *source, const char *destination) { getattr(source, &a); if (S_ISDIR(a.st.st_mode)) { - xmkdir_p(destination, a.st.st_mode & 0777); + xmkdirs(destination, a.st.st_mode & 0777); src = xopen(source, O_RDONLY | O_CLOEXEC); dest = xopen(destination, O_RDONLY | O_CLOEXEC); fsetattr(dest, &a); diff --git a/core/jni/utils/img.c b/core/jni/utils/img.c index 6ea192805..cd28b8011 100644 --- a/core/jni/utils/img.c +++ b/core/jni/utils/img.c @@ -139,9 +139,9 @@ char *mount_image(const char *img, const char *target) { if (access(img, F_OK) == -1) return NULL; if (access(target, F_OK) == -1) { - if (xmkdir_p(target, 0755) == -1) { + if (xmkdirs(target, 0755) == -1) { xmount(NULL, "/", NULL, MS_REMOUNT, NULL); - xmkdir_p(target, 0755); + xmkdirs(target, 0755); xmount(NULL, "/", NULL, MS_REMOUNT | MS_RDONLY, NULL); } } diff --git a/core/jni/utils/misc.c b/core/jni/utils/misc.c index 1822ee456..7bca4ea76 100644 --- a/core/jni/utils/misc.c +++ b/core/jni/utils/misc.c @@ -304,7 +304,7 @@ int switch_mnt_ns(int pid) { fd = xopen(mnt, O_RDONLY); if (fd < 0) return 1; // Switch to its namespace - ret = setns(fd, 0); + ret = xsetns(fd, 0); close(fd); return ret; } diff --git a/core/jni/utils/xwrap.c b/core/jni/utils/xwrap.c index a08873409..c74d149d3 100644 --- a/core/jni/utils/xwrap.c +++ b/core/jni/utils/xwrap.c @@ -156,14 +156,6 @@ int xbind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { return ret; } -int xconnect(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { - int ret = connect(sockfd, addr, addrlen); - if (ret == -1) { - PLOGE("connect"); - } - return ret; -} - int xlisten(int sockfd, int backlog) { int ret = listen(sockfd, backlog); if (ret == -1) { @@ -229,14 +221,6 @@ int xpthread_create(pthread_t *thread, const pthread_attr_t *attr, return errno; } -int xsocketpair(int domain, int type, int protocol, int sv[2]) { - int ret = socketpair(domain, type, protocol, sv); - if (ret == -1) { - PLOGE("socketpair"); - } - return ret; -} - int xstat(const char *pathname, struct stat *buf) { int ret = stat(pathname, buf); if (ret == -1) { @@ -292,7 +276,7 @@ int xsymlink(const char *target, const char *linkpath) { int xmount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data) { - int ret = mount(source, target, filesystemtype, mountflags, data); + int ret = mount(source, target, filesystemtype, MS_SILENT | mountflags, data); if (ret == -1) { PLOGE("mount %s->%s", source, target); } @@ -331,10 +315,10 @@ int xmkdir(const char *pathname, mode_t mode) { return ret; } -int xmkdir_p(const char *pathname, mode_t mode) { - int ret = mkdir_p(pathname, mode); +int xmkdirs(const char *pathname, mode_t mode) { + int ret = mkdirs(pathname, mode); if (ret == -1) { - PLOGE("mkdir_p %s", pathname); + PLOGE("mkdirs %s", pathname); } return ret; }