94 lines
2.7 KiB
Rust
Raw Normal View History

#![feature(format_args_nl)]
#![feature(once_cell_try)]
#![feature(try_blocks)]
2023-06-22 02:23:27 -07:00
use logging::setup_klog;
use mount::{is_device_mounted, switch_root};
use rootdir::{collect_overlay_contexts, inject_magisk_rc, reset_overlay_contexts};
2023-05-24 19:11:56 -07:00
// Has to be pub so all symbols in that crate is included
2025-01-30 20:20:37 +08:00
pub use magiskpolicy;
2022-07-05 21:13:09 -07:00
mod logging;
mod mount;
mod rootdir;
2025-01-30 21:59:42 +08:00
mod getinfo;
2025-01-31 01:37:15 +08:00
mod init;
2025-01-31 12:35:42 +08:00
mod twostage;
2022-07-05 21:13:09 -07:00
2023-05-23 21:50:13 -07:00
#[cxx::bridge]
pub mod ffi {
2025-01-30 21:59:42 +08:00
#[derive(Debug)]
2025-01-30 18:39:34 +08:00
struct KeyValue {
key: String,
value: String,
}
struct BootConfig {
skip_initramfs: bool,
force_normal_boot: bool,
rootwait: bool,
emulator: bool,
slot: [c_char; 3],
dt_dir: [c_char; 64],
fstab_suffix: [c_char; 32],
hardware: [c_char; 32],
hardware_plat: [c_char; 32],
partition_map: Vec<KeyValue>,
}
2025-01-30 19:39:31 +08:00
struct MagiskInit {
preinit_dev: String,
mount_list: Vec<String>,
argv: *mut *mut c_char,
config: BootConfig,
}
2023-05-23 21:50:13 -07:00
#[namespace = "rust"]
2022-07-05 21:13:09 -07:00
extern "Rust" {
fn setup_klog();
fn inject_magisk_rc(fd: i32, tmp_dir: Utf8CStrRef);
fn switch_root(path: Utf8CStrRef);
2024-02-27 22:27:52 +08:00
fn is_device_mounted(dev: u64, target: Pin<&mut CxxString>) -> bool;
fn collect_overlay_contexts(src: Utf8CStrRef);
fn reset_overlay_contexts();
}
2025-01-30 20:43:47 +08:00
2025-01-30 20:29:50 +08:00
extern "Rust" {
2025-01-30 21:59:42 +08:00
fn print(self: &BootConfig);
2025-01-30 20:29:50 +08:00
fn prepare_data(self: &MagiskInit);
2025-01-31 01:37:15 +08:00
fn legacy_system_as_root(self: &mut MagiskInit);
fn restore_ramdisk_init(self: &MagiskInit);
2025-01-30 20:29:50 +08:00
}
unsafe extern "C++" {
include!("../base/include/base.hpp");
2025-01-31 01:37:15 +08:00
include!("init.hpp");
#[namespace = "rust"]
#[cxx_name = "Utf8CStr"]
type Utf8CStrRef<'a> = base::ffi::Utf8CStrRef<'a>;
2025-01-31 01:37:15 +08:00
unsafe fn magisk_proxy_main(argc: i32, argv: *mut *mut c_char) -> i32;
2025-01-30 18:39:34 +08:00
fn init(self: &mut BootConfig);
type kv_pairs;
fn set(self: &mut BootConfig, config: &kv_pairs);
2025-01-30 19:39:31 +08:00
unsafe fn setup_tmp(self: &MagiskInit, path: *const c_char);
fn collect_devices(self: &MagiskInit);
fn mount_preinit_dir(self: &MagiskInit);
unsafe fn find_block(self: &MagiskInit, partname: *const c_char) -> u64;
fn mount_system_root(self: &mut MagiskInit) -> bool;
// Setup and patch root directory
fn parse_config_file(self: &mut MagiskInit);
fn patch_rw_root(self: &mut MagiskInit);
fn patch_ro_root(self: &mut MagiskInit);
// SELinux
unsafe fn patch_sepolicy(self: &MagiskInit, in_: *const c_char, out: *const c_char);
fn hijack_sepolicy(self: &mut MagiskInit) -> bool;
2025-01-31 01:37:15 +08:00
fn backup_init(self: &MagiskInit) -> *const c_char;
fn check_two_stage(self: &MagiskInit) -> bool;
2022-07-05 21:13:09 -07:00
}
}