From 0bc36b32993ba4f0918f707cedab2ba27ecf2785 Mon Sep 17 00:00:00 2001 From: tiann Date: Thu, 2 Feb 2023 19:21:37 +0800 Subject: [PATCH] ksud: fix incorrecy RAII --- userspace/ksud/src/module.rs | 10 ++++++++-- userspace/ksud/src/mount.rs | 1 + userspace/ksud/src/utils.rs | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index f613a4ac..9f76d1ba 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -505,7 +505,9 @@ fn do_install_module(zip: String) -> Result<()> { // mount the modules_update.img to mountpoint println!("- Mounting image"); - mount::AutoMountExt4::try_new(tmp_module_img, module_update_tmp_dir)?; + let _dontdrop = mount::AutoMountExt4::try_new(tmp_module_img, module_update_tmp_dir)?; + + info!("mounted {} to {}", tmp_module_img, module_update_tmp_dir); setsyscon(module_update_tmp_dir)?; @@ -529,8 +531,10 @@ fn do_install_module(zip: String) -> Result<()> { exec_install_script(&zip)?; + info!("rename {tmp_module_img} to {}", defs::MODULE_UPDATE_IMG); // all done, rename the tmp image to modules_update.img if std::fs::rename(tmp_module_img, defs::MODULE_UPDATE_IMG).is_err() { + warn!("Rename image failed, try copy it."); std::fs::copy(tmp_module_img, defs::MODULE_UPDATE_IMG) .with_context(|| "Failed to copy image.".to_string())?; let _ = std::fs::remove_file(tmp_module_img); @@ -538,6 +542,8 @@ fn do_install_module(zip: String) -> Result<()> { mark_update()?; + info!("Module install successfully!"); + Ok(()) } @@ -583,7 +589,7 @@ where ensure_clean_dir(update_dir)?; // mount the modules_update img - mount::AutoMountExt4::try_new(defs::MODULE_UPDATE_TMP_IMG, update_dir)?; + let _dontdrop = mount::AutoMountExt4::try_new(defs::MODULE_UPDATE_TMP_IMG, update_dir)?; // call the operation func let result = func(id, update_dir); diff --git a/userspace/ksud/src/mount.rs b/userspace/ksud/src/mount.rs index 6651726b..c60e3351 100644 --- a/userspace/ksud/src/mount.rs +++ b/userspace/ksud/src/mount.rs @@ -77,6 +77,7 @@ impl AutoMountExt4 { #[cfg(target_os = "android")] impl Drop for AutoMountExt4 { fn drop(&mut self) { + log::info!("AutoMountExt4 drop: {}", self.mnt); let _ = self.umount(); } } diff --git a/userspace/ksud/src/utils.rs b/userspace/ksud/src/utils.rs index f9bc7a02..9c3071cc 100644 --- a/userspace/ksud/src/utils.rs +++ b/userspace/ksud/src/utils.rs @@ -8,7 +8,9 @@ use std::{ pub fn ensure_clean_dir(dir: &str) -> Result<()> { let path = Path::new(dir); + log::debug!("ensure_clean_dir: {}", path.display()); if path.exists() { + log::debug!("ensure_clean_dir: {} exists, remove it", path.display()); std::fs::remove_dir_all(path)?; } Ok(std::fs::create_dir_all(path)?)