Skip to content

Commit 6154a49

Browse files
TreeHugger Robotandroid-build-merge-worker-robot
authored andcommitted
Merge "Do not re-initialize synthetic password" into rvc-dev am: 5ad4ec3 am: b00cccb
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12653063 Change-Id: I32586fc3a174f8811f0c016838f897b3334b741b
2 parents 8423331 + b00cccb commit 6154a49

2 files changed

Lines changed: 22 additions & 3 deletions

File tree

services/core/java/com/android/server/locksettings/LockSettingsService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
import com.android.internal.notification.SystemNotificationChannels;
114114
import com.android.internal.util.DumpUtils;
115115
import com.android.internal.util.IndentingPrintWriter;
116+
import com.android.internal.util.Preconditions;
116117
import com.android.internal.widget.ICheckCredentialProgressCallback;
117118
import com.android.internal.widget.ILockSettings;
118119
import com.android.internal.widget.LockPatternUtils;
@@ -2618,6 +2619,10 @@ private void callToAuthSecretIfNeeded(@UserIdInt int userId,
26182619
protected AuthenticationToken initializeSyntheticPasswordLocked(byte[] credentialHash,
26192620
LockscreenCredential credential, int userId) {
26202621
Slog.i(TAG, "Initialize SyntheticPassword for user: " + userId);
2622+
Preconditions.checkState(
2623+
getSyntheticPasswordHandleLocked(userId) == SyntheticPasswordManager.DEFAULT_HANDLE,
2624+
"Cannot reinitialize SP");
2625+
26212626
final AuthenticationToken auth = mSpManager.newSyntheticPasswordAndSid(
26222627
getGateKeeperService(), credentialHash, credential, userId);
26232628
if (auth == null) {
@@ -2678,7 +2683,7 @@ private boolean isSyntheticPasswordBasedCredentialLocked(int userId) {
26782683

26792684
@VisibleForTesting
26802685
protected boolean shouldMigrateToSyntheticPasswordLocked(int userId) {
2681-
return true;
2686+
return getSyntheticPasswordHandleLocked(userId) == SyntheticPasswordManager.DEFAULT_HANDLE;
26822687
}
26832688

26842689
private VerifyCredentialResponse spBasedDoVerifyCredential(LockscreenCredential userCredential,

services/tests/servicestests/src/com/android/server/locksettings/SyntheticPasswordTests.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -519,10 +519,24 @@ public void testPasswordChange_NoOrphanedFilesLeft() throws Exception {
519519
LockscreenCredential password = newPassword("password");
520520
initializeCredentialUnderSP(password, PRIMARY_USER_ID);
521521
assertTrue(mService.setLockCredential(password, password, PRIMARY_USER_ID));
522+
assertNoOrphanedFilesLeft(PRIMARY_USER_ID);
523+
}
524+
525+
@Test
526+
public void testAddingEscrowToken_NoOrphanedFilesLeft() throws Exception {
527+
final byte[] token = "some-high-entropy-secure-token".getBytes();
528+
for (int i = 0; i < 16; i++) {
529+
long handle = mLocalService.addEscrowToken(token, PRIMARY_USER_ID, null);
530+
assertTrue(mLocalService.isEscrowTokenActive(handle, PRIMARY_USER_ID));
531+
mLocalService.removeEscrowToken(handle, PRIMARY_USER_ID);
532+
}
533+
assertNoOrphanedFilesLeft(PRIMARY_USER_ID);
534+
}
522535

536+
private void assertNoOrphanedFilesLeft(int userId) {
523537
String handleString = String.format("%016x",
524-
mService.getSyntheticPasswordHandleLocked(PRIMARY_USER_ID));
525-
File directory = mStorage.getSyntheticPasswordDirectoryForUser(PRIMARY_USER_ID);
538+
mService.getSyntheticPasswordHandleLocked(userId));
539+
File directory = mStorage.getSyntheticPasswordDirectoryForUser(userId);
526540
for (File file : directory.listFiles()) {
527541
String[] parts = file.getName().split("\\.");
528542
if (!parts[0].equals(handleString) && !parts[0].equals("0000000000000000")) {

0 commit comments

Comments
 (0)