cryptohome: Set auth_locked policy to false when PIN is reset.

The auth_locked policy must explicitly be set to false for Chrome to
recognize the PIN is usable after a reset.

Cherry picked from
https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2994464

BUG=chromium:1224150
TEST=Lock out PIN and use password

Change-Id: I06896c23be7ceccbaea88f48001f25c752c43d64
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/3002282
Reviewed-by: Daniil Lunev <dlunev@chromium.org>
Commit-Queue: Greg Kerr OOO <kerrnel@chromium.org>
Tested-by: Greg Kerr OOO <kerrnel@chromium.org>
Auto-Submit: Greg Kerr OOO <kerrnel@chromium.org>
diff --git a/cryptohome/vault_keyset.cc b/cryptohome/vault_keyset.cc
index f8e905a..d6362d5 100644
--- a/cryptohome/vault_keyset.cc
+++ b/cryptohome/vault_keyset.cc
@@ -429,6 +429,13 @@
 
     reset_salt_ = CryptoLib::CreateSecureRandomBlob(kAesBlockSize);
     reset_secret_ = CryptoLib::HmacSha256(reset_salt_.value(), reset_seed_);
+
+    // crbug.com/1224150: When an LE credential is resaved, that means the user
+    // authenticated successfully. In this case, auth_locked policy must always
+    // be set to false. Otherwise when a user enters their password, and
+    // PinWeaver unlocks the LE Credential, this field will remain set to true
+    // and PIN is never usable by Chrome.
+    auth_locked_ = false;
   }
 
   AuthBlockState auth_block_state;
@@ -461,7 +468,7 @@
 }
 
 std::string VaultKeyset::GetLabel() const {
-  if (key_data_.has_value()) {
+  if (key_data_.has_value() & !key_data_->label().empty()) {
     return key_data_->label();
   }
   // Fallback for legacy keys, for which the label has to be inferred from the
@@ -758,10 +765,8 @@
     *(serialized.mutable_key_data()) = key_data_.value();
   }
 
-  if (auth_locked_) {
-    serialized.mutable_key_data()->mutable_policy()->set_auth_locked(
-        auth_locked_);
-  }
+  serialized.mutable_key_data()->mutable_policy()->set_auth_locked(
+      auth_locked_);
 
   if (wrapped_chaps_key_.has_value()) {
     serialized.set_wrapped_chaps_key(wrapped_chaps_key_->data(),