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
diff --git a/crypto/lollipop/cryptfs.c b/crypto/lollipop/cryptfs.c
index c6586cc..496b960 100644
--- a/crypto/lollipop/cryptfs.c
+++ b/crypto/lollipop/cryptfs.c
@@ -725,7 +725,7 @@
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 8cb8a7a..bc8b463 100644
--- a/crypto/lollipop/cryptfs.h
+++ b/crypto/lollipop/cryptfs.h
@@ -213,6 +213,7 @@
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 cee7c15..b880302 100644
--- a/gui/devices/landscape/res/landscape.xml
+++ b/gui/devices/landscape/res/landscape.xml
@@ -1057,10 +1057,7 @@
</object>
<object type="button">
- <conditions>
- <condition var1="tw_has_internal" var2="1" />
- <condition var1="tw_has_data_media" var2="1" />
- </conditions>
+ <condition var1="tw_has_data_media" var2="1" />
<highlight color="%highlight_color%" />
<placement x="%col3_x%" y="%wipe_button_y%" />
<font resource="font" color="%button_text_color%" />
@@ -1071,6 +1068,30 @@
</actions>
</object>
+ <object type="button">
+ <conditions>
+ <condition var1="tw_is_encrypted" var2="1" />
+ <condition var1="tw_has_data_media" var2="0" />
+ </conditions>
+ <highlight color="%highlight_color%" />
+ <placement x="%col3_x%" y="%wipe_button_y%" />
+ <font resource="font" color="%button_text_color%" />
+ <text>Wipe Encryption</text>
+ <image resource="main_button" />
+ <actions>
+ <action function="set">tw_back=wipe</action>
+ <action function="set">tw_action=wipe</action>
+ <action function="set">tw_action_param=DATAMEDIA</action>
+ <action function="set">tw_has_action2=0</action>
+ <action function="set">tw_text1=Wipe Encryption from Data?</action>
+ <action function="set">tw_text2=</action>
+ <action function="set">tw_action_text1=Formatting Data...</action>
+ <action function="set">tw_complete_text1=Data Format Complete</action>
+ <action function="set">tw_slider_text=Swipe to Format Data</action>
+ <action function="page">confirm_action</action>
+ </actions>
+ </object>
+
<object type="text" color="%text_color%">
<font resource="font" />
<placement x="%center_x%" y="%row12_text_y%" placement="5" />
diff --git a/gui/devices/portrait/res/portrait.xml b/gui/devices/portrait/res/portrait.xml
index 9a95710..a7fbbf4 100644
--- a/gui/devices/portrait/res/portrait.xml
+++ b/gui/devices/portrait/res/portrait.xml
@@ -769,10 +769,7 @@
</object>
<object type="button">
- <conditions>
- <condition var1="tw_has_internal" var2="1" />
- <condition var1="tw_has_data_media" var2="1" />
- </conditions>
+ <condition var1="tw_has_data_media" var2="1" />
<highlight color="%highlight_color%" />
<placement x="%col2_x%" y="%wipe_button_y%" />
<font resource="font" color="%button_text_color%" />
@@ -783,6 +780,30 @@
</actions>
</object>
+ <object type="button">
+ <conditions>
+ <condition var1="tw_is_encrypted" var2="1" />
+ <condition var1="tw_has_data_media" var2="0" />
+ </conditions>
+ <highlight color="%highlight_color%" />
+ <placement x="%col2_x%" y="%wipe_button_y%" />
+ <font resource="font" color="%button_text_color%" />
+ <text>Wipe Encryption</text>
+ <image resource="main_button" />
+ <actions>
+ <action function="set">tw_back=wipe</action>
+ <action function="set">tw_action=wipe</action>
+ <action function="set">tw_action_param=DATAMEDIA</action>
+ <action function="set">tw_has_action2=0</action>
+ <action function="set">tw_text1=Wipe Encryption from Data?</action>
+ <action function="set">tw_text2=</action>
+ <action function="set">tw_action_text1=Formatting Data...</action>
+ <action function="set">tw_complete_text1=Data Format Complete</action>
+ <action function="set">tw_slider_text=Swipe to Format Data</action>
+ <action function="page">confirm_action</action>
+ </actions>
+ </object>
+
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
diff --git a/gui/devices/watch/res/watch.xml b/gui/devices/watch/res/watch.xml
index d3ddc54..2379569 100644
--- a/gui/devices/watch/res/watch.xml
+++ b/gui/devices/watch/res/watch.xml
@@ -712,10 +712,7 @@
</object>
<object type="button">
- <conditions>
- <condition var1="tw_has_internal" var2="1" />
- <condition var1="tw_has_data_media" var2="1" />
- </conditions>
+ <condition var1="tw_has_data_media" var2="1" />
<highlight color="%highlight_color%" />
<placement x="%col2_x%" y="%wipe_button_y%" />
<font resource="font" color="%button_text_color%" />
@@ -726,6 +723,30 @@
</actions>
</object>
+ <object type="button">
+ <conditions>
+ <condition var1="tw_is_encrypted" var2="1" />
+ <condition var1="tw_has_data_media" var2="0" />
+ </conditions>
+ <highlight color="%highlight_color%" />
+ <placement x="%col2_x%" y="%wipe_button_y%" />
+ <font resource="font" color="%button_text_color%" />
+ <text>Wipe Encryption</text>
+ <image resource="main_button" />
+ <actions>
+ <action function="set">tw_back=wipe</action>
+ <action function="set">tw_action=wipe</action>
+ <action function="set">tw_action_param=DATAMEDIA</action>
+ <action function="set">tw_has_action2=0</action>
+ <action function="set">tw_text1=Wipe Encryption from Data?</action>
+ <action function="set">tw_text2=</action>
+ <action function="set">tw_action_text1=Formatting Data...</action>
+ <action function="set">tw_complete_text1=Data Format Complete</action>
+ <action function="set">tw_slider_text=Swipe to Format Data</action>
+ <action function="page">confirm_action</action>
+ </actions>
+ </object>
+
<object type="slider">
<placement x="%slider_x%" y="%slider_y%" />
<resource base="slider" used="slider-used" touch="slider-touch" />
diff --git a/partition.cpp b/partition.cpp
index b20367f..409a688 100644
--- a/partition.cpp
+++ b/partition.cpp
@@ -1371,6 +1371,15 @@
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 @@
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