cryptohome: Derive fscrypt version from userdirectory

Currently mount is dependent on SerializedVaultKeyset for dircrypto
version. This CL now makes it independent of that and it now derives it
from the version of encryption of user directory.

BUG=chromium:1138511
TEST=unittests, cryptohome tast tests, CQ Dry Run

Change-Id: Ia1fd122e70f671f41998fceed1bc7631a59b6dd4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2471980
Tested-by: Hardik Goyal <hardikgoyal@chromium.org>
Commit-Queue: Hardik Goyal <hardikgoyal@chromium.org>
Auto-Submit: Hardik Goyal <hardikgoyal@chromium.org>
Reviewed-by: Sarthak Kukreti <sarthakkukreti@chromium.org>
Reviewed-by: Daniil Lunev <dlunev@chromium.org>
Reviewed-by: Jorge Lucangeli Obes <jorgelo@chromium.org>
diff --git a/cryptohome/mount.cc b/cryptohome/mount.cc
index a8716ad..90ac835 100644
--- a/cryptohome/mount.cc
+++ b/cryptohome/mount.cc
@@ -461,7 +461,13 @@
   }
   if (should_mount_dircrypto) {
     dircrypto_key_reference_.policy_version =
-        serialized.fscrypt_policy_version();
+        dircrypto::GetDirectoryPolicyVersion(
+            homedirs_->GetUserMountDirectory(obfuscated_username));
+    if (dircrypto_key_reference_.policy_version < 0) {
+      dircrypto_key_reference_.policy_version =
+          dircrypto::CheckFscryptKeyIoctlSupport() ? FSCRYPT_POLICY_V2
+                                                   : FSCRYPT_POLICY_V1;
+    }
     dircrypto_key_reference_.reference = vault_keyset.fek_sig();
     if (!platform_->AddDirCryptoKeyToKeyring(vault_keyset.fek(),
                                              &dircrypto_key_reference_)) {
@@ -687,13 +693,6 @@
         credentials.challenge_credentials_keyset_info();
   }
 
-  // Set the fscrypt policy version, depending on whether the fscrypt key ioctls
-  // are supported.
-  if (mount_type_ == MountType::DIR_CRYPTO &&
-      dircrypto::CheckFscryptKeyIoctlSupport()) {
-    serialized.set_fscrypt_policy_version(FSCRYPT_POLICY_V2);
-  }
-
   // TODO(wad) move to storage by label-derivative and not number.
   if (!StoreVaultKeysetForUser(obfuscated_username,
                                0,  // first key