From 361674de4ee3c0c26e1846fe031cba0b2b878499 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Fri, 12 Aug 2022 02:41:44 +0000 Subject: [PATCH] Avoid redundant unlock of newly created key IVold.createUserKey unlocks the key that it creates, so the later call to IVold.unlockUserKey is unnecessary and just triggers a warning: W vold : Tried to unlock already-unlocked key for user 10 Avoid this by making the createUserKey and destroyUserKey methods of StorageManagerService update the mLocalUnlockedUsers array, so that the StorageManagerService state stays in sync with the vold state. Test: pm create-user 10; am start-user 10; checked logcat Bug: 232452368 Change-Id: I238b2b218582e2791b25998e8ebaa1004ca0466d --- .../java/com/android/server/StorageManagerService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/services/core/java/com/android/server/StorageManagerService.java b/services/core/java/com/android/server/StorageManagerService.java index 83e3b499fc96d..4a3f682a592d0 100644 --- a/services/core/java/com/android/server/StorageManagerService.java +++ b/services/core/java/com/android/server/StorageManagerService.java @@ -3047,6 +3047,10 @@ class StorageManagerService extends IStorageManager.Stub try { mVold.createUserKey(userId, serialNumber, ephemeral); + // New keys are always unlocked. + synchronized (mLock) { + mLocalUnlockedUsers.append(userId); + } } catch (Exception e) { Slog.wtf(TAG, e); } @@ -3058,6 +3062,10 @@ class StorageManagerService extends IStorageManager.Stub try { mVold.destroyUserKey(userId); + // Destroying a key also locks it. + synchronized (mLock) { + mLocalUnlockedUsers.remove(userId); + } } catch (Exception e) { Slog.wtf(TAG, e); }