Merge "Do not delete all keys after creating a first crypt device"
diff --git a/MetadataCrypt.cpp b/MetadataCrypt.cpp
index 0396138..a0f7b8b 100644
--- a/MetadataCrypt.cpp
+++ b/MetadataCrypt.cpp
@@ -118,7 +118,7 @@
return true;
}
-static bool read_key(const std::string& metadata_key_dir, const KeyGeneration& gen,
+static bool read_key(const std::string& metadata_key_dir, const KeyGeneration& gen, bool first_key,
KeyBuffer* key) {
if (metadata_key_dir.empty()) {
LOG(ERROR) << "Failed to get metadata_key_dir";
@@ -130,7 +130,7 @@
if (!MkdirsSync(dir, 0700)) return false;
auto in_dsu = android::base::GetBoolProperty("ro.gsid.image_running", false);
// !pathExists(dir) does not imply there's a factory reset when in DSU mode.
- if (!pathExists(dir) && !in_dsu) {
+ if (!pathExists(dir) && !in_dsu && first_key) {
auto delete_all = android::base::GetBoolProperty(
"ro.crypto.metadata_init_delete_all_keys.enabled", false);
if (delete_all) {
@@ -290,7 +290,7 @@
}
auto gen = needs_encrypt ? makeGen(options) : neverGen();
KeyBuffer key;
- if (!read_key(default_metadata_key_dir, gen, &key)) {
+ if (!read_key(default_metadata_key_dir, gen, true, &key)) {
LOG(ERROR) << "read_key failed in mountFstab";
return false;
}
@@ -308,7 +308,7 @@
if (!zoned_device.empty()) {
auto zoned_metadata_key_dir = data_rec->metadata_key_dir + "/zoned";
- if (!read_key(zoned_metadata_key_dir, gen, &key)) {
+ if (!read_key(zoned_metadata_key_dir, gen, false, &key)) {
LOG(ERROR) << "read_key failed with zoned device: " << zoned_device;
return false;
}