Merge "Detect factory reset and deleteAllKeys"

This commit is contained in:
Paul Crowley 2021-08-11 17:39:55 +00:00 committed by Gerrit Code Review
commit 407b2c2386
3 changed files with 27 additions and 0 deletions

View file

@ -230,5 +230,18 @@ void Keystore::earlyBootEnded() {
logKeystore2ExceptionIfPresent(rc, "earlyBootEnded");
}
void Keystore::deleteAllKeys() {
::ndk::SpAIBinder binder(AServiceManager_getService(maintenance_service_name));
auto maint_service = ks2_maint::IKeystoreMaintenance::fromBinder(binder);
if (!maint_service) {
LOG(ERROR) << "Unable to connect to keystore2 maintenance service for deleteAllKeys";
return;
}
auto rc = maint_service->deleteAllKeys();
logKeystore2ExceptionIfPresent(rc, "deleteAllKeys");
}
} // namespace vold
} // namespace android

View file

@ -126,6 +126,9 @@ class Keystore {
// be created or used.
static void earlyBootEnded();
// Tell all Keymint devices to delete all rollback-protected keys.
static void deleteAllKeys();
private:
std::shared_ptr<ks2::IKeystoreSecurityLevel> securityLevel;
DISALLOW_COPY_AND_ASSIGN(Keystore);

View file

@ -113,6 +113,17 @@ static bool read_key(const std::string& metadata_key_dir, const KeyGeneration& g
auto dir = metadata_key_dir + "/key";
LOG(DEBUG) << "metadata_key_dir/key: " << dir;
if (!MkdirsSync(dir, 0700)) return false;
if (!pathExists(dir)) {
auto delete_all = android::base::GetBoolProperty(
"ro.crypto.metadata_init_delete_all_keys.enabled", false);
if (delete_all) {
LOG(INFO) << "Metadata key does not exist, calling deleteAllKeys";
Keystore::deleteAllKeys();
} else {
LOG(DEBUG) << "Metadata key does not exist but "
"ro.crypto.metadata_init_delete_all_keys.enabled is false";
}
}
auto temp = metadata_key_dir + "/tmp";
return retrieveOrGenerateKey(dir, temp, kEmptyAuthentication, gen, key);
}