From 82599a87ee93544d33b4c1927df45b9c20d7db41 Mon Sep 17 00:00:00 2001 From: Gary Peck Date: Wed, 21 Nov 2012 16:23:12 -0800 Subject: Improve handling of undecrypted encrypted /data - Until the encrypted partition is decrypted, treat it as a disk image instead of a filesystem so that it is properly backed up using dd. - Make Partition::Wipe() use the filesystem from fstab for disk images so that wiping an undecrypted /data makes it a plain unencrypted partition again. Change-Id: I78db977d6348cfa66b0cfbc492fb5776f84db48d --- partition.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'partition.cpp') diff --git a/partition.cpp b/partition.cpp index 145fb14bc..f5173b13d 100644 --- a/partition.cpp +++ b/partition.cpp @@ -214,9 +214,17 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) { } else if (!Mount(false)) { Is_Encrypted = true; Is_Decrypted = false; + Can_Be_Mounted = false; + Current_File_System = "emmc"; + Setup_Image(Display_Error); DataManager::SetValue(TW_IS_ENCRYPTED, 1); DataManager::SetValue(TW_CRYPTO_PASSWORD, ""); DataManager::SetValue("tw_crypto_display", ""); + } else { + // Filesystem is not encrypted and the mount + // succeeded, so get it back to the original + // unmounted state + UnMount(false); } #ifdef RECOVERY_SDCARD_ON_DATA if (!Is_Encrypted || (Is_Encrypted && Is_Decrypted)) @@ -414,12 +422,12 @@ void TWPartition::Setup_File_System(bool Display_Error) { void TWPartition::Setup_Image(bool Display_Error) { Display_Name = Mount_Point.substr(1, Mount_Point.size() - 1); Backup_Name = Display_Name; - if (Fstab_File_System == "emmc") + if (Current_File_System == "emmc") Backup_Method = DD; - else if (Fstab_File_System == "mtd" || Fstab_File_System == "bml") + else if (Current_File_System == "mtd" || Current_File_System == "bml") Backup_Method = FLASH_UTILS; else - LOGI("Unhandled file system '%s' on image '%s'\n", Fstab_File_System.c_str(), Display_Name.c_str()); + LOGI("Unhandled file system '%s' on image '%s'\n", Current_File_System.c_str(), Display_Name.c_str()); if (Find_Partition_Size()) { Used = Size; Backup_Size = Size; @@ -768,7 +776,10 @@ bool TWPartition::Wipe(string New_File_System) { } bool TWPartition::Wipe() { - return Wipe(Current_File_System); + if (Is_File_System(Current_File_System)) + return Wipe(Current_File_System); + else + return Wipe(Fstab_File_System); } bool TWPartition::Wipe_AndSec(void) { -- cgit v1.2.3