diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-01-16 01:02:05 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-01-16 01:02:05 +0000 |
| commit | 4256a577bdd97ccbd5ec5f2ff72d60d33616cfa0 (patch) | |
| tree | 3ee8b9369fe2477f472c505c3e3c6fcf78827d5f | |
| parent | b14200a27237c4a27b13ed9276e807320de5cbf4 (diff) | |
| parent | 7ebcaef6237fb00eeaed37a6187148e0b0bbe2e1 (diff) | |
Merge "Clear binder identity for UserManager calls"
| -rw-r--r-- | services/core/java/com/android/server/location/UserInfoStore.java | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/location/UserInfoStore.java b/services/core/java/com/android/server/location/UserInfoStore.java index 550f51c7de58..f282ed26a831 100644 --- a/services/core/java/com/android/server/location/UserInfoStore.java +++ b/services/core/java/com/android/server/location/UserInfoStore.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.UserInfo; +import android.os.Binder; import android.os.Build; import android.os.UserHandle; import android.os.UserManager; @@ -152,7 +153,7 @@ public class UserInfoStore { // this intent is only sent to the current user if (mCachedParentUserId == mCurrentUserId) { mCachedParentUserId = UserHandle.USER_NULL; - mCachedProfileUserIds = null; + mCachedProfileUserIds = new int[]{UserHandle.USER_NULL}; } } @@ -185,16 +186,21 @@ public class UserInfoStore { } else { Preconditions.checkState(mUserManager != null); - UserInfo userInfo = mUserManager.getProfileParent(userId); - if (userInfo != null) { - parentUserId = userInfo.id; - } else { - // getProfileParent() returns null if the userId is already the parent... - parentUserId = userId; - } + long identity = Binder.clearCallingIdentity(); + try { + UserInfo userInfo = mUserManager.getProfileParent(userId); + if (userInfo != null) { + parentUserId = userInfo.id; + } else { + // getProfileParent() returns null if the userId is already the parent... + parentUserId = userId; + } - // force profiles into cache - getProfileUserIdsForParentUser(parentUserId); + // force profiles into cache + getProfileUserIdsForParentUser(parentUserId); + } finally { + Binder.restoreCallingIdentity(identity); + } } return parentUserId; @@ -204,13 +210,24 @@ public class UserInfoStore { private int[] getProfileUserIdsForParentUser(@UserIdInt int parentUserId) { Preconditions.checkState(mUserManager != null); + // only assert on debug builds as this is a more expensive check if (Build.IS_DEBUGGABLE) { - Preconditions.checkArgument(mUserManager.getProfileParent(parentUserId) == null); + long identity = Binder.clearCallingIdentity(); + try { + Preconditions.checkArgument(mUserManager.getProfileParent(parentUserId) == null); + } finally { + Binder.restoreCallingIdentity(identity); + } } if (parentUserId != mCachedParentUserId) { - mCachedParentUserId = parentUserId; - mCachedProfileUserIds = mUserManager.getProfileIdsWithDisabled(parentUserId); + long identity = Binder.clearCallingIdentity(); + try { + mCachedParentUserId = parentUserId; + mCachedProfileUserIds = mUserManager.getProfileIdsWithDisabled(parentUserId); + } finally { + Binder.restoreCallingIdentity(identity); + } } return mCachedProfileUserIds; |
