diff options
| author | 2017-07-21 18:29:42 +0000 | |
|---|---|---|
| committer | 2017-07-21 18:29:42 +0000 | |
| commit | 11a134083abfa63cc657e8554820624976e68c57 (patch) | |
| tree | bdbaa86786e32c0df4b9c3e6fbd1ffeda23477ab | |
| parent | 88901bd0df37eeedfe7ece3bf4e8be4fe701fa77 (diff) | |
| parent | 48976a1731ad294475b56c7dbff1c41654053f79 (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.java | 15 |
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; } |