ksud: fix common post-fs-data.d may not execute if no modules are enabled

This commit is contained in:
weishu
2023-07-24 13:39:51 +08:00
parent 978178afc0
commit 3664003260

View File

@@ -92,6 +92,8 @@ pub fn mount_systemlessly(module_dir: &str) -> Result<()> {
pub fn on_post_data_fs() -> Result<()> { pub fn on_post_data_fs() -> Result<()> {
crate::ksu::report_post_fs_data(); crate::ksu::report_post_fs_data();
utils::umask(0);
#[cfg(unix)] #[cfg(unix)]
let _ = catch_bootlog(); let _ = catch_bootlog();
@@ -100,7 +102,18 @@ pub fn on_post_data_fs() -> Result<()> {
return Ok(()); return Ok(());
} }
utils::umask(0); let safe_mode = crate::utils::is_safe_mode();
if safe_mode {
// we should still mount modules.img to `/data/adb/modules` in safe mode
// becuase we may need to operate the module dir in safe mode
warn!("safe mode, skip common post-fs-data.d scripts");
} else {
// Then exec common post-fs-data scripts
if let Err(e) = crate::module::exec_common_scripts("post-fs-data.d", true) {
warn!("exec common post-fs-data scripts failed: {}", e);
}
}
let module_update_img = defs::MODULE_UPDATE_IMG; let module_update_img = defs::MODULE_UPDATE_IMG;
let module_img = defs::MODULE_IMG; let module_img = defs::MODULE_IMG;
@@ -129,7 +142,6 @@ pub fn on_post_data_fs() -> Result<()> {
} }
} }
// If there isn't any image exist, do nothing for module!
if !Path::new(target_update_img).exists() { if !Path::new(target_update_img).exists() {
return Ok(()); return Ok(());
} }
@@ -140,8 +152,8 @@ pub fn on_post_data_fs() -> Result<()> {
mount::AutoMountExt4::try_new(target_update_img, module_dir, false) mount::AutoMountExt4::try_new(target_update_img, module_dir, false)
.with_context(|| "mount module image failed".to_string())?; .with_context(|| "mount module image failed".to_string())?;
// check safe mode first. // if we are in safe mode, we should disable all modules
if crate::utils::is_safe_mode() { if safe_mode {
warn!("safe mode, skip post-fs-data scripts and disable all modules!"); warn!("safe mode, skip post-fs-data scripts and disable all modules!");
if let Err(e) = crate::module::disable_all_modules() { if let Err(e) = crate::module::disable_all_modules() {
warn!("disable all modules failed: {}", e); warn!("disable all modules failed: {}", e);
@@ -153,11 +165,6 @@ pub fn on_post_data_fs() -> Result<()> {
warn!("prune modules failed: {}", e); warn!("prune modules failed: {}", e);
} }
// Then exec common post-fs-data scripts
if let Err(e) = crate::module::exec_common_scripts("post-fs-data.d", true) {
warn!("exec common post-fs-data scripts failed: {}", e);
}
// load sepolicy.rule // load sepolicy.rule
if crate::module::load_sepolicy_rule().is_err() { if crate::module::load_sepolicy_rule().is_err() {
warn!("load sepolicy.rule failed"); warn!("load sepolicy.rule failed");
@@ -197,7 +204,7 @@ pub fn on_services() -> Result<()> {
} }
if crate::utils::is_safe_mode() { if crate::utils::is_safe_mode() {
warn!("safe mode, skip module service scripts"); warn!("safe mode, skip service.d scripts");
return Ok(()); return Ok(());
} }