summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Android Build Merger (Role) <android-build-merger@google.com> 2017-07-21 18:29:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-07-21 18:29:42 +0000
commit11a134083abfa63cc657e8554820624976e68c57 (patch)
treebdbaa86786e32c0df4b9c3e6fbd1ffeda23477ab
parent88901bd0df37eeedfe7ece3bf4e8be4fe701fa77 (diff)
parent48976a1731ad294475b56c7dbff1c41654053f79 (diff)
Merge "Merge "Ensure backup doesn't reuse ack tokens nearby in time" into oc-dr1-dev am: 672f578fd1" into oc-dr1-dev-plus-aosp
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java15
1 files changed, 7 insertions, 8 deletions
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index abfc31e29eb5..a27a77eb66b2 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -123,8 +123,8 @@ import com.android.server.EventLogTags;
import com.android.server.SystemConfig;
import com.android.server.SystemService;
import com.android.server.backup.PackageManagerBackupAgent.Metadata;
-
import com.android.server.power.BatterySaverPolicy.ServiceType;
+
import libcore.io.IoUtils;
import java.io.BufferedInputStream;
@@ -691,6 +691,7 @@ public class BackupManagerService implements BackupManagerServiceInterface {
final SparseArray<Operation> mCurrentOperations = new SparseArray<Operation>();
final Object mCurrentOpLock = new Object();
final Random mTokenGenerator = new Random();
+ final AtomicInteger mNextToken = new AtomicInteger();
final SparseArray<AdbParams> mAdbBackupRestoreConfirmations = new SparseArray<AdbParams>();
@@ -763,15 +764,13 @@ public class BackupManagerService implements BackupManagerServiceInterface {
@GuardedBy("mQueueLock")
ArrayList<FullBackupEntry> mFullBackupQueue;
- // Utility: build a new random integer token
+ // Utility: build a new random integer token. The low bits are the ordinal of the
+ // operation for near-time uniqueness, and the upper bits are random for app-
+ // side unpredictability.
@Override
public int generateRandomIntegerToken() {
- int token;
- do {
- synchronized (mTokenGenerator) {
- token = mTokenGenerator.nextInt();
- }
- } while (token < 0);
+ int token = mTokenGenerator.nextInt() & ~0xFF;
+ token |= (mNextToken.incrementAndGet() & 0xFF);
return token;
}