Merge "Fix bug where sometimes the full backup pw would not be validated"
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index 2e3d6dd..8b7d3a8 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -2034,6 +2034,15 @@
                 boolean compressing = COMPRESS_FULL_BACKUPS;
                 OutputStream finalOutput = ofstream;
 
+                // Verify that the given password matches the currently-active
+                // backup password, if any
+                if (hasBackupPassword()) {
+                    if (!passwordMatchesSaved(mCurrentPassword, PBKDF2_HASH_ROUNDS)) {
+                        if (DEBUG) Slog.w(TAG, "Backup password mismatch; aborting");
+                        return;
+                    }
+                }
+
                 // Write the global file header.  All strings are UTF-8 encoded; lines end
                 // with a '\n' byte.  Actual backup data begins immediately following the
                 // final '\n'.
@@ -2068,15 +2077,6 @@
                 try {
                     // Set up the encryption stage if appropriate, and emit the correct header
                     if (encrypting) {
-                        // Verify that the given password matches the currently-active
-                        // backup password, if any
-                        if (hasBackupPassword()) {
-                            if (!passwordMatchesSaved(mCurrentPassword, PBKDF2_HASH_ROUNDS)) {
-                                if (DEBUG) Slog.w(TAG, "Backup password mismatch; aborting");
-                                return;
-                            }
-                        }
-
                         finalOutput = emitAesBackupHeader(headerbuf, finalOutput);
                     } else {
                         headerbuf.append("none\n");