Merge "Add --keep_memtag_mode for --wipe_data" into main am: 0d4e8c333c am: f8d48e1846
Original change: https://android-review.googlesource.com/c/platform/bootable/recovery/+/2810434
Change-Id: Iee895c10dfe9f26c7f49c43101d1a3a49b09c741
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/install/include/install/wipe_data.h b/install/include/install/wipe_data.h
index 42cad87..255d9b1 100644
--- a/install/include/install/wipe_data.h
+++ b/install/include/install/wipe_data.h
@@ -27,4 +27,4 @@
bool WipeCache(RecoveryUI* ui, const std::function<bool()>& confirm);
// Returns true on success.
-bool WipeData(Device* device);
+bool WipeData(Device* device, bool keep_memtag_mode = false);
diff --git a/install/wipe_data.cpp b/install/wipe_data.cpp
index c65e6f4..7aff622 100644
--- a/install/wipe_data.cpp
+++ b/install/wipe_data.cpp
@@ -79,7 +79,7 @@
return success;
}
-bool WipeData(Device* device) {
+bool WipeData(Device* device, bool keep_memtag_mode) {
RecoveryUI* ui = device->GetUI();
ui->Print("\n-- Wiping data...\n");
ui->SetBackground(RecoveryUI::ERASING);
@@ -101,11 +101,15 @@
success &= EraseVolume(METADATA_ROOT, ui);
}
}
- ui->Print("Resetting memtag message...\n");
- std::string err;
- if (!WriteMiscMemtagMessage({}, &err)) {
- ui->Print("Failed to reset memtag message: %s\n", err.c_str());
- success = false;
+ if (keep_memtag_mode) {
+ ui->Print("NOT resetting memtag message as per request...\n");
+ } else {
+ ui->Print("Resetting memtag message...\n");
+ std::string err;
+ if (!WriteMiscMemtagMessage({}, &err)) {
+ ui->Print("Failed to reset memtag message: %s\n", err.c_str());
+ success = false;
+ }
}
if (success) {
success &= device->PostWipeData();
diff --git a/recovery.cpp b/recovery.cpp
index 4d39019..1a6a7d6 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -608,6 +608,7 @@
{ "wipe_ab", no_argument, nullptr, 0 },
{ "wipe_cache", no_argument, nullptr, 0 },
{ "wipe_data", no_argument, nullptr, 0 },
+ { "keep_memtag_mode", no_argument, nullptr, 0 },
{ "wipe_package_size", required_argument, nullptr, 0 },
{ nullptr, 0, nullptr, 0 },
};
@@ -616,6 +617,7 @@
bool install_with_fuse = false; // memory map the update package by default.
bool should_wipe_data = false;
bool should_prompt_and_wipe_data = false;
+ bool should_keep_memtag_mode = false;
bool should_wipe_cache = false;
bool should_wipe_ab = false;
size_t wipe_package_size = 0;
@@ -675,6 +677,8 @@
should_wipe_data = true;
} else if (option == "wipe_package_size") {
android::base::ParseUint(optarg, &wipe_package_size);
+ } else if (option == "keep_memtag_mode") {
+ should_keep_memtag_mode = true;
}
break;
}
@@ -793,7 +797,7 @@
} else if (should_wipe_data) {
save_current_log = true;
CHECK(device->GetReason().has_value());
- if (!WipeData(device)) {
+ if (!WipeData(device, should_keep_memtag_mode)) {
status = INSTALL_ERROR;
}
} else if (should_prompt_and_wipe_data) {