From 61bd5961f6fc7d163a884668a29c6486b837169c Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Tue, 31 Jan 2023 20:53:27 +0000 Subject: [PATCH] Do not initialize the weaver service at boot It can be initialized when needed. Some weaver HAL implementations aren't ready that early, so we don't want to try and initialize it then. Test: atest com.android.server.locksettings Bug: 252760591 Change-Id: I6eba59cc64025de496bdf91f9aa5eff53a515143 --- .../locksettings/LockSettingsService.java | 1 - .../SyntheticPasswordManager.java | 23 ++++++++----------- .../MockSyntheticPasswordManager.java | 1 - 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index ebc18bcd2369a..f3b8e94a8af79 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -814,7 +814,6 @@ public class LockSettingsService extends ILockSettings.Stub { .hasSystemFeature(PackageManager.FEATURE_SECURE_LOCK_SCREEN); migrateOldData(); getGateKeeperService(); - mSpManager.initWeaverService(); getAuthSecretHal(); mDeviceProvisionedObserver.onSystemReady(); diff --git a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java index ea000a0b96078..789e5b2902d50 100644 --- a/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java +++ b/services/core/java/com/android/server/locksettings/SyntheticPasswordManager.java @@ -499,40 +499,35 @@ class SyntheticPasswordManager { return null; } - public synchronized void initWeaverService() { + private synchronized boolean isWeaverAvailable() { if (mWeaver != null) { - return; + return true; } + // Re-initialize weaver in case there was a transient error preventing access to it. IWeaver weaver = getWeaverService(); if (weaver == null) { - return; + return false; } - // Get the config - WeaverConfig weaverConfig = null; + final WeaverConfig weaverConfig; try { weaverConfig = weaver.getConfig(); } catch (RemoteException | ServiceSpecificException e) { Slog.e(TAG, "Failed to get weaver config", e); + return false; } if (weaverConfig == null || weaverConfig.slots <= 0) { - Slog.e(TAG, "Failed to initialize weaver config"); - return; + Slog.e(TAG, "Invalid weaver config"); + return false; } mWeaver = weaver; mWeaverConfig = weaverConfig; mPasswordSlotManager.refreshActiveSlots(getUsedWeaverSlots()); Slog.i(TAG, "Weaver service initialized"); - } - private synchronized boolean isWeaverAvailable() { - if (mWeaver == null) { - //Re-initializing weaver in case there was a transient error preventing access to it. - initWeaverService(); - } - return mWeaver != null && mWeaverConfig.slots > 0; + return true; } /** diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java index a40cb0625e1cc..e8ef398f3738b 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/MockSyntheticPasswordManager.java @@ -119,6 +119,5 @@ public class MockSyntheticPasswordManager extends SyntheticPasswordManager { public void enableWeaver() { mWeaverService = new MockWeaverService(); - initWeaverService(); } }