Treat /vendor like /system for read only

The vendor partition is verity checked just like system so we
should treat vendor as read only same as system.

Change-Id: Ida65c9f44d8610e52fcdcef0b4a50faf5c7110d2
This commit is contained in:
Ethan Yonker
2015-10-26 21:51:58 -05:00
committed by Dees Troy
parent 0543f06679
commit 1673e3d4ea
3 changed files with 30 additions and 0 deletions

View File

@@ -1798,6 +1798,7 @@ int GUIAction::mountsystemtoggle(std::string arg)
{
int op_status = 0;
bool remount_system = PartitionManager.Is_Mounted_By_Path("/system");
bool remount_vendor = PartitionManager.Is_Mounted_By_Path("/vendor");
operation_start("Toggle System Mount");
if (!PartitionManager.UnMount_By_Path("/system", true)) {
@@ -1819,6 +1820,20 @@ int GUIAction::mountsystemtoggle(std::string arg)
} else {
op_status = 1; // fail
}
Part = PartitionManager.Find_Partition_By_Path("/vendor");
if (Part) {
if (arg == "0") {
Part->Change_Mount_Read_Only(false);
} else {
Part->Change_Mount_Read_Only(true);
}
if (remount_vendor) {
Part->Mount(true);
}
op_status = 0; // success
} else {
op_status = 1; // fail
}
}
operation_end(op_status);

View File

@@ -354,6 +354,11 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) {
Backup_Display_Name = Display_Name;
DataManager::SetValue("tw_boot_is_mountable", 1);
Can_Be_Backed_Up = true;
} else if (Mount_Point == "/vendor") {
Display_Name = "Vendor";
Backup_Display_Name = Display_Name;
Storage_Name = Display_Name;
Mount_Read_Only = true;
}
#ifdef TW_EXTERNAL_STORAGE_PATH
if (Mount_Point == EXPAND(TW_EXTERNAL_STORAGE_PATH)) {
@@ -399,6 +404,11 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) {
Backup_Display_Name = Display_Name;
Can_Flash_Img = false;
Can_Be_Backed_Up = true;
} else if (Mount_Point == "/vendor_image") {
Display_Name = "Vendor Image";
Backup_Display_Name = Display_Name;
Can_Flash_Img = false;
Can_Be_Backed_Up = true;
}
}

View File

@@ -345,6 +345,7 @@ int main(int argc, char **argv) {
#ifndef TW_OEM_BUILD
// Check if system has never been changed
TWPartition* sys = PartitionManager.Find_Partition_By_Path("/system");
TWPartition* ven = PartitionManager.Find_Partition_By_Path("/vendor");
if (sys) {
if ((DataManager::GetIntValue("tw_mount_system_ro") == 0 && sys->Check_Lifetime_Writes() == 0) || DataManager::GetIntValue("tw_mount_system_ro") == 2) {
if (DataManager::GetIntValue("tw_never_show_system_ro_page") == 0) {
@@ -354,11 +355,15 @@ int main(int argc, char **argv) {
}
} else if (DataManager::GetIntValue("tw_mount_system_ro") == 0) {
sys->Change_Mount_Read_Only(false);
if (ven)
ven->Change_Mount_Read_Only(false);
}
} else if (DataManager::GetIntValue("tw_mount_system_ro") == 1) {
// Do nothing, user selected to leave system read only
} else {
sys->Change_Mount_Read_Only(false);
if (ven)
ven->Change_Mount_Read_Only(false);
}
}
#endif