From d79d9bceb36cebbcb926e414155489c6ce8fb741 Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Sat, 20 Dec 2014 15:38:29 -0600 Subject: Allow non datamedia devices to wipe encryption With 5.0 L, we decrypt automatically if the default_password is used. Non datamedia devices do not get the format data button so they cannot wipe encryption off the device. This patch add a wipe encryption button where the format data button would normally be located on the Wipe page. This patch also attempts to remove / delete the dm-crypt block device before formatting. Change-Id: I100d5d154d6c49254fd48e23279df973db5f23ae --- crypto/lollipop/cryptfs.c | 2 +- crypto/lollipop/cryptfs.h | 1 + gui/devices/landscape/res/landscape.xml | 29 +++++++++++++++++++++++++---- gui/devices/portrait/res/portrait.xml | 29 +++++++++++++++++++++++++---- gui/devices/watch/res/watch.xml | 29 +++++++++++++++++++++++++---- partition.cpp | 10 ++++++++++ 6 files changed, 87 insertions(+), 13 deletions(-) diff --git a/crypto/lollipop/cryptfs.c b/crypto/lollipop/cryptfs.c index c6586cc49..496b960ad 100644 --- a/crypto/lollipop/cryptfs.c +++ b/crypto/lollipop/cryptfs.c @@ -725,7 +725,7 @@ errout: return retval; } -static int delete_crypto_blk_dev(char *name) +int delete_crypto_blk_dev(char *name) { int fd; char buffer[DM_CRYPT_BUF_SIZE]; diff --git a/crypto/lollipop/cryptfs.h b/crypto/lollipop/cryptfs.h index 8cb8a7a32..bc8b463ee 100644 --- a/crypto/lollipop/cryptfs.h +++ b/crypto/lollipop/cryptfs.h @@ -213,6 +213,7 @@ extern "C" { int cryptfs_check_passwd(char *pw); int cryptfs_verify_passwd(char *newpw); int cryptfs_get_password_type(void); + int delete_crypto_blk_dev(char *name); #ifdef __cplusplus } #endif diff --git a/gui/devices/landscape/res/landscape.xml b/gui/devices/landscape/res/landscape.xml index cee7c1553..b8803026a 100644 --- a/gui/devices/landscape/res/landscape.xml +++ b/gui/devices/landscape/res/landscape.xml @@ -1057,10 +1057,7 @@ - - - - + @@ -1071,6 +1068,30 @@ + + + + + + + + + Wipe Encryption + + + tw_back=wipe + tw_action=wipe + tw_action_param=DATAMEDIA + tw_has_action2=0 + tw_text1=Wipe Encryption from Data? + tw_text2= + tw_action_text1=Formatting Data... + tw_complete_text1=Data Format Complete + tw_slider_text=Swipe to Format Data + confirm_action + + + diff --git a/gui/devices/portrait/res/portrait.xml b/gui/devices/portrait/res/portrait.xml index 9a9571012..a7fbbf460 100644 --- a/gui/devices/portrait/res/portrait.xml +++ b/gui/devices/portrait/res/portrait.xml @@ -769,10 +769,7 @@ - - - - + @@ -783,6 +780,30 @@ + + + + + + + + + Wipe Encryption + + + tw_back=wipe + tw_action=wipe + tw_action_param=DATAMEDIA + tw_has_action2=0 + tw_text1=Wipe Encryption from Data? + tw_text2= + tw_action_text1=Formatting Data... + tw_complete_text1=Data Format Complete + tw_slider_text=Swipe to Format Data + confirm_action + + + diff --git a/gui/devices/watch/res/watch.xml b/gui/devices/watch/res/watch.xml index d3ddc5417..23795695f 100644 --- a/gui/devices/watch/res/watch.xml +++ b/gui/devices/watch/res/watch.xml @@ -712,10 +712,7 @@ - - - - + @@ -726,6 +723,30 @@ + + + + + + + + + Wipe Encryption + + + tw_back=wipe + tw_action=wipe + tw_action_param=DATAMEDIA + tw_has_action2=0 + tw_text1=Wipe Encryption from Data? + tw_text2= + tw_action_text1=Formatting Data... + tw_complete_text1=Data Format Complete + tw_slider_text=Swipe to Format Data + confirm_action + + + diff --git a/partition.cpp b/partition.cpp index b20367f77..409a688d5 100644 --- a/partition.cpp +++ b/partition.cpp @@ -1371,6 +1371,15 @@ bool TWPartition::Wipe_Encryption() { Has_Data_Media = false; Decrypted_Block_Device = ""; +#ifdef TW_INCLUDE_CRYPTO + if (Is_Decrypted) { + if (!UnMount(true)) + return false; + if (delete_crypto_blk_dev("userdata") != 0) { + LOGERR("Error deleting crypto block device, continuing anyway.\n"); + } + } +#endif Is_Decrypted = false; Is_Encrypted = false; Find_Actual_Block_Device(); @@ -1381,6 +1390,7 @@ bool TWPartition::Wipe_Encryption() { if (Mount(false)) PartitionManager.Add_MTP_Storage(MTP_Storage_ID); } + DataManager::SetValue(TW_IS_ENCRYPTED, 0); #ifndef TW_OEM_BUILD gui_print("You may need to reboot recovery to be able to use /data again.\n"); #endif -- cgit v1.2.3