Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf93a3a3 authored by Evan Severson's avatar Evan Severson
Browse files

Fix NPEs in {AppId,Package}AppOpPolicy

We've seen recent NPEs where setting the appop mode fails because the
user doesn't exist in the state. This is due to a race condition so we
need to protect against it.

Fixes: 320267569
Test: Build and boot
Change-Id: I4a8dc1e6370761e61b05bd444bc52e0efec6d59d
parent 5b6153e8
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.permission.access.appop

import android.app.AppOpsManager
import android.util.Slog
import com.android.server.permission.access.GetStateScope
import com.android.server.permission.access.MutableAccessState
import com.android.server.permission.access.MutateStateScope
@@ -84,6 +85,10 @@ class AppIdAppOpPolicy : BaseAppOpPolicy(AppIdAppOpPersistence()) {
        appOpName: String,
        mode: Int
    ): Boolean {
        if (userId !in newState.userStates) {
            Slog.e(LOG_TAG, "Unable to set app op mode for missing user $userId")
            return false
        }
        val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
        val oldMode =
            newState.userStates[userId]!!
@@ -152,4 +157,8 @@ class AppIdAppOpPolicy : BaseAppOpPolicy(AppIdAppOpPersistence()) {
         */
        abstract fun onStateMutated()
    }

    companion object {
        private val LOG_TAG = AppIdAppOpPolicy::class.java.simpleName
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.permission.access.appop

import android.app.AppOpsManager
import android.util.Slog
import com.android.server.permission.access.GetStateScope
import com.android.server.permission.access.MutableAccessState
import com.android.server.permission.access.MutateStateScope
@@ -87,6 +88,10 @@ class PackageAppOpPolicy : BaseAppOpPolicy(PackageAppOpPersistence()) {
        appOpName: String,
        mode: Int
    ): Boolean {
        if (userId !in newState.userStates) {
            Slog.e(LOG_TAG, "Unable to set app op mode for missing user $userId")
            return false
        }
        val defaultMode = AppOpsManager.opToDefaultMode(appOpName)
        val oldMode =
            newState.userStates[userId]!!
@@ -155,4 +160,8 @@ class PackageAppOpPolicy : BaseAppOpPolicy(PackageAppOpPersistence()) {
         */
        abstract fun onStateMutated()
    }

    companion object {
        private val LOG_TAG = PackageAppOpPolicy::class.java.simpleName
    }
}