Skip to content

Commit

Permalink
Move worker mount to magiskinit
Browse files Browse the repository at this point in the history
  • Loading branch information
yujincheng08 authored and topjohnwu committed Aug 15, 2024
1 parent 838e1e2 commit 1db8022
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 22 deletions.
3 changes: 2 additions & 1 deletion native/src/core/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use daemon::{daemon_entry, find_apk_path, get_magiskd, MagiskD};
use logging::{
android_logging, magisk_logging, zygisk_close_logd, zygisk_get_logd, zygisk_logging,
};
use mount::{find_preinit_device, revert_unmount, setup_mounts};
use mount::{find_preinit_device, revert_unmount, setup_mounts, clean_mounts};
use resetprop::{persist_delete_prop, persist_get_prop, persist_get_props, persist_set_prop};

mod cert;
Expand Down Expand Up @@ -92,6 +92,7 @@ pub mod ffi {
fn find_apk_path(pkg: Utf8CStrRef, data: &mut [u8]) -> usize;
fn read_certificate(fd: i32, version: i32) -> Vec<u8>;
fn setup_mounts();
fn clean_mounts();
fn find_preinit_device() -> String;
fn revert_unmount(pid: i32);
unsafe fn persist_get_prop(name: Utf8CStrRef, prop_cb: Pin<&mut PropCb>);
Expand Down
9 changes: 2 additions & 7 deletions native/src/core/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,11 +157,9 @@ void tmpfs_node::mount() {
if (!isa<tmpfs_node>(parent())) {
auto worker_dir = worker_path();
mkdirs(worker_dir.data(), 0);
bind_mount("tmpfs", worker_dir.data(), worker_dir.data());
clone_attr(exist() ? node_path().data() : parent()->node_path().data(), worker_dir.data());
dir_node::mount();
VLOGD(replace() ? "replace" : "move", worker_dir.data(), node_path().data());
xmount(worker_dir.data(), node_path().data(), nullptr, MS_MOVE, nullptr);
bind_mount(replace() ? "replace" : "move", worker_dir.data(), node_path().data());
xmount(nullptr, node_path().data(), nullptr, MS_REMOUNT | MS_BIND | MS_RDONLY, nullptr);
} else {
const string dest = worker_path();
Expand Down Expand Up @@ -333,10 +331,7 @@ void load_modules() {
}

// cleanup mounts
ssprintf(buf, sizeof(buf), "%s/" WORKERDIR, get_magisk_tmp());
xumount2(buf, MNT_DETACH);
ssprintf(buf, sizeof(buf), "%s/" MODULEMNT, get_magisk_tmp());
xumount2(buf, MNT_DETACH);
clean_mounts();
}

/************************
Expand Down
32 changes: 18 additions & 14 deletions native/src/core/mount.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,36 +94,40 @@ pub fn setup_mounts() {
ptr::null(),
)
.as_os_err()?;
libc::mount(
ptr::null(),
}
};
}

pub fn clean_mounts() {
let magisk_tmp = get_magisk_tmp();

let mut buf = Utf8CStrBufArr::default();

let module_mnt = FsPathBuf::new(&mut buf).join(magisk_tmp).join(MODULEMNT);
let _: LoggedResult<()> = try {
unsafe {
libc::umount2(
module_mnt.as_ptr(),
ptr::null(),
libc::MS_PRIVATE,
ptr::null(),
libc::MNT_DETACH,
)
.as_os_err()?;
}
};

// Prepare worker
let worker_dir = FsPathBuf::new(&mut buf).join(magisk_tmp).join(WORKERDIR);
let _: LoggedResult<()> = try {
worker_dir.mkdir(0)?;
unsafe {
libc::mount(
worker_dir.as_ptr(),
ptr::null(),
worker_dir.as_ptr(),
ptr::null(),
libc::MS_BIND,
libc::MS_PRIVATE | libc::MS_REC,
ptr::null(),
)
.as_os_err()?;
libc::mount(
ptr::null(),
libc::umount2(
worker_dir.as_ptr(),
ptr::null(),
libc::MS_PRIVATE,
ptr::null(),
libc::MNT_DETACH,
)
.as_os_err()?;
}
Expand Down
4 changes: 4 additions & 0 deletions native/src/init/mount.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,7 @@ void MagiskInit::setup_tmp(const char *path) {

xmkdir(INTLROOT, 0711);
xmkdir(DEVICEDIR, 0711);
xmkdir(WORKERDIR, 0);

mount_preinit_dir(preinit_dev);

Expand All @@ -251,6 +252,9 @@ void MagiskInit::setup_tmp(const char *path) {

chdir(path);

// Prepare worker
xmount(WORKERDIR, WORKERDIR, nullptr, MS_BIND, nullptr);

// Use isolated devpts if kernel support
if (access("/dev/pts/ptmx", F_OK) == 0) {
xmkdirs(SHELLPTS, 0755);
Expand Down

0 comments on commit 1db8022

Please sign in to comment.