Merge "Update crypt footer flags while upgrading version from 1.2 to 1.3"
diff --git a/cryptfs.c b/cryptfs.c
index 5592fce..f6dad2d 100755
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -603,6 +603,24 @@
         SLOGW("upgrading crypto footer to 1.3");
         crypt_ftr->crypt_type = CRYPT_TYPE_PASSWORD;
         crypt_ftr->minor_version = 3;
+        /* Here if we get CRYPT_DATA_CORRUPT flag set (i.e. 0x8) then it means
+         * CRYPT_FDE_COMPLETED flag was set in actual for crypto footer version 1.2.
+         * Now while upgrading footer to 1.3, we need to reset CRYPT_DATA_CORRUPT flag
+         * and set CRYPT_FDE_COMPLETED flag back.
+         */
+        if (crypt_ftr->flags & CRYPT_DATA_CORRUPT) {
+            crypt_ftr->flags &= ~CRYPT_DATA_CORRUPT;
+            crypt_ftr->flags |= CRYPT_FDE_COMPLETED;
+        }
+        /* Here if we get CRYPT_INCONSISTENT_STATE flag set (i.e. 0x4) then it means
+         * CRYPT_PFE_ACTIVATED flag was set in actual for crypto footer version 1.2.
+         * Now while upgrading footer to 1.3, we need to reset CRYPT_INCONSISTENT_STATE
+         * flag and set CRYPT_PFE_ACTIVATED flag back.
+         */
+        if (crypt_ftr->flags & CRYPT_INCONSISTENT_STATE) {
+            crypt_ftr->flags &= ~CRYPT_INCONSISTENT_STATE;
+            crypt_ftr->flags |= CRYPT_PFE_ACTIVATED;
+        }
     }
 
     if ((orig_major != crypt_ftr->major_version) || (orig_minor != crypt_ftr->minor_version)) {