Log a warning if old creds passed to change_user_key don't work.
Bug: 26948053
Change-Id: I8c117bfe5e85e73af72b6ecafea39924f3561c7c
diff --git a/Ext4Crypt.cpp b/Ext4Crypt.cpp
index 1921546..d456cfd 100644
--- a/Ext4Crypt.cpp
+++ b/Ext4Crypt.cpp
@@ -516,7 +516,10 @@
if (!parse_hex(token_hex, token)) return false;
if (!parse_hex(old_secret_hex, old_secret)) return false;
if (!parse_hex(new_secret_hex, new_secret)) return false;
- auto auth = new_secret.empty()
+ auto old_auth = old_secret.empty()
+ ? kEmptyAuthentication
+ : android::vold::KeyAuthentication(token, old_secret);
+ auto new_auth = new_secret.empty()
? kEmptyAuthentication
: android::vold::KeyAuthentication(token, new_secret);
auto it = s_ce_keys.find(user_id);
@@ -526,8 +529,14 @@
}
auto ce_key = it->second;
auto ce_key_path = get_ce_key_path(user_id);
+ std::string trial_key;
+ if (!android::vold::retrieveKey(ce_key_path, old_auth, trial_key)) {
+ LOG(WARNING) << "change_user_key wasn't given enough info to reconstruct the key";
+ } else if (ce_key != trial_key) {
+ LOG(WARNING) << "Reconstructed key != stored key";
+ }
android::vold::destroyKey(ce_key_path);
- if (!store_key(ce_key_path, user_key_temp, auth, ce_key)) return false;
+ if (!store_key(ce_key_path, user_key_temp, new_auth, ce_key)) return false;
return true;
}