android root: restore context for android system root
In this patchset we will store and reset the android system root context after a wipe and restore to prevent issues with no context labels in the file_contexts being applied. This will prevent no boot issues in android with selinux denials on the system root partition. Change-Id: I87fd3a6060fbaa3e7bdfd7a4b1d09feeb4fa3f27 (cherry picked from commit 35d2bfda3c89ebd212a9bd2328bffd7464f95d47)
This commit is contained in:
@@ -751,5 +751,6 @@
|
||||
<string name="rescue_party2"> 2. Format data, and/or</string>
|
||||
<string name="rescue_party3"> 3. Clean-flash your ROM.</string>
|
||||
<string name="rescue_party4">The reported problem is: </string>
|
||||
<string name="restore_system_context">Unable to get default context for {1} -- Android may not boot.</string>
|
||||
</resources>
|
||||
</language>
|
||||
|
||||
@@ -1687,6 +1687,12 @@ bool TWPartition::Wipe(string New_File_System) {
|
||||
if (Mount_Point == "/cache")
|
||||
Log_Offset = 0;
|
||||
|
||||
if (Mount_Point == PartitionManager.Get_Android_Root_Path()) {
|
||||
if (tw_get_default_metadata(PartitionManager.Get_Android_Root_Path().c_str()) != 0) {
|
||||
gui_msg(Msg(msg::kWarning, "restore_system_context=Unable to get default context for {1} -- Android may not boot.")(PartitionManager.Get_Android_Root_Path()));
|
||||
}
|
||||
}
|
||||
|
||||
if (Has_Data_Media && Current_File_System == New_File_System) {
|
||||
wiped = Wipe_Data_Without_Wiping_Media();
|
||||
if (Mount_Point == "/data" && TWFunc::get_log_dir() == DATA_LOGS_DIR) {
|
||||
@@ -1726,6 +1732,9 @@ bool TWPartition::Wipe(string New_File_System) {
|
||||
if (Mount_Point == "/cache" && TWFunc::get_log_dir() != DATA_LOGS_DIR)
|
||||
DataManager::Output_Version();
|
||||
|
||||
if (Mount_Point == PartitionManager.Get_Android_Root_Path()) {
|
||||
tw_set_default_metadata(PartitionManager.Get_Android_Root_Path().c_str());
|
||||
}
|
||||
if (update_crypt) {
|
||||
Setup_File_System(false);
|
||||
if (Is_Encrypted && !Is_Decrypted) {
|
||||
|
||||
@@ -1197,6 +1197,10 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
|
||||
|
||||
string Full_Filename = part_settings.Backup_Folder + "/" + part_settings.Part->Backup_FileName;
|
||||
|
||||
if (tw_get_default_metadata(Get_Android_Root_Path().c_str()) != 0) {
|
||||
gui_msg(Msg(msg::kWarning, "restore_system_context=Unable to get default context for {1} -- Android may not boot.")(Get_Android_Root_Path()));
|
||||
}
|
||||
|
||||
if (check_digest > 0 && !twrpDigestDriver::Check_Digest(Full_Filename))
|
||||
return false;
|
||||
part_settings.partition_count++;
|
||||
@@ -1252,6 +1256,7 @@ int TWPartitionManager::Run_Restore(const string& Restore_Name) {
|
||||
}
|
||||
}
|
||||
TWFunc::GUI_Operation_Text(TW_UPDATE_SYSTEM_DETAILS_TEXT, gui_parse_text("{@updating_system_details}"));
|
||||
tw_set_default_metadata(Get_Android_Root_Path().c_str());
|
||||
UnMount_By_Path(Get_Android_Root_Path(), false);
|
||||
Update_System_Details();
|
||||
UnMount_Main_Partitions();
|
||||
|
||||
Reference in New Issue
Block a user