diff options
| author | 2024-01-24 17:47:50 +0000 | |
|---|---|---|
| committer | 2024-01-24 17:48:11 +0000 | |
| commit | c78e8c3cada1a84ef2fae1b6826a3a5c92a11d05 (patch) | |
| tree | a4ff6d5464bebcb82c6c5ffe0b7e580031800883 | |
| parent | d91d78d8a43a2d7b75deef0adf05fabcf094bc99 (diff) | |
Fix NPEs in DevicePermissionPolicy.
Similar to ag/25910620
Fixes: 322101844
Test: presubmit
Change-Id: I33e6999d818d899dc29cee8f4644918a68cc27b4
| -rw-r--r-- | services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt b/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt index a0fb0138e5e5..24d49523b9d1 100644 --- a/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt +++ b/services/permission/java/com/android/server/permission/access/permission/DevicePermissionPolicy.kt @@ -94,7 +94,9 @@ class DevicePermissionPolicy : SchemePolicy() { isSystemUpdated: Boolean ) { packageNames.forEachIndexed { _, packageName -> - val packageState = newState.externalState.packageStates[packageName]!! + // The package may still be removed even if it was once notified as installed. + val packageState = newState.externalState.packageStates[packageName] + ?: return@forEachIndexed trimPermissionStates(packageState.appId) } } @@ -245,6 +247,13 @@ class DevicePermissionPolicy : SchemePolicy() { flagMask: Int, flagValues: Int ): Boolean { + if (userId !in newState.userStates) { + // Despite that we check UserManagerInternal.exists() in PermissionService, we may still + // sometimes get race conditions between that check and the actual mutateState() call. + // This should rarely happen but at least we should not crash. + Slog.e(LOG_TAG, "Unable to update permission flags for missing user $userId") + return false + } val oldFlags = newState.userStates[userId]!! .appIdDevicePermissionFlags[appId] |