diff --git a/userspace/ksud/src/cli.rs b/userspace/ksud/src/cli.rs index dd64aae0..4b042b24 100644 --- a/userspace/ksud/src/cli.rs +++ b/userspace/ksud/src/cli.rs @@ -152,6 +152,11 @@ enum Commands { #[command(subcommand)] command: Debug, }, + /// Kernel interface + Kernel { + #[command(subcommand)] + command: Kernel, + }, } #[derive(clap::Subcommand, Debug)] @@ -378,6 +383,15 @@ enum Feature { Save, } +#[derive(clap::Subcommand, Debug)] +enum Kernel { + /// Nuke ext4 sysfs + NukeExt4Sysfs { + /// mount point + mnt: String, + }, +} + #[cfg(target_arch = "aarch64")] mod kpm_cmd { use clap::Subcommand; @@ -590,6 +604,9 @@ pub fn run() -> Result<()> { magiskboot, flash, } => crate::boot_patch::restore(boot, magiskboot, flash), + Commands::Kernel { command } => match command { + Kernel::NukeExt4Sysfs { mnt } => ksucalls::nuke_ext4_sysfs(&mnt), + }, #[cfg(target_arch = "aarch64")] Commands::Kpm { command } => { use crate::cli::kpm_cmd::Kpm; diff --git a/userspace/ksud/src/ksucalls.rs b/userspace/ksud/src/ksucalls.rs index 401bfe99..446f3ed8 100644 --- a/userspace/ksud/src/ksucalls.rs +++ b/userspace/ksud/src/ksucalls.rs @@ -17,6 +17,7 @@ const KSU_IOCTL_GET_FEATURE: u32 = 0xc0004b0d; // _IOC(_IOC_READ|_IOC_WRITE, 'K' const KSU_IOCTL_SET_FEATURE: u32 = 0x40004b0e; // _IOC(_IOC_WRITE, 'K', 14, 0) const KSU_IOCTL_GET_WRAPPER_FD: u32 = 0x40004b0f; // _IOC(_IOC_WRITE, 'K', 15, 0) const KSU_IOCTL_MANAGE_MARK: u32 = 0xc0004b10; // _IOC(_IOC_READ|_IOC_WRITE, 'K', 16, 0) +const KSU_IOCTL_NUKE_EXT4_SYSFS: u32 = 0xc0004b11; // _IOC(_IOC_READ|_IOC_WRITE, 'K', 17, 0) #[repr(C)] #[derive(Clone, Copy, Default)] @@ -73,6 +74,12 @@ struct ManageMarkCmd { result: u32, } +#[repr(C)] +#[derive(Clone, Copy, Default)] +pub struct NukeExt4SysfsCmd { + pub arg: u64, +} + // Mark operation constants const KSU_MARK_GET: u32 = 1; const KSU_MARK_MARK: u32 = 2; @@ -294,3 +301,12 @@ pub fn mark_refresh() -> std::io::Result<()> { ksuctl(KSU_IOCTL_MANAGE_MARK, &mut cmd as *mut _)?; Ok(()) } + +pub fn nuke_ext4_sysfs(mnt: &str) -> anyhow::Result<()> { + let c_mnt = std::ffi::CString::new(mnt)?; + let mut ioctl_cmd = NukeExt4SysfsCmd { + arg: c_mnt.as_ptr() as u64, + }; + ksuctl(KSU_IOCTL_NUKE_EXT4_SYSFS, &mut ioctl_cmd as *mut _)?; + Ok(()) +} diff --git a/userspace/meta-overlayfs/metamodule/post-mount.sh b/userspace/meta-overlayfs/metamodule/post-mount.sh new file mode 100644 index 00000000..6234b6ab --- /dev/null +++ b/userspace/meta-overlayfs/metamodule/post-mount.sh @@ -0,0 +1,3 @@ +#!/system/bin/sh + +ksud kernel nuke-ext4-sysfs /data/adb/modules/meta-overlayfs/mnt