summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-01-16 01:02:05 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-01-16 01:02:05 +0000
commit4256a577bdd97ccbd5ec5f2ff72d60d33616cfa0 (patch)
tree3ee8b9369fe2477f472c505c3e3c6fcf78827d5f
parentb14200a27237c4a27b13ed9276e807320de5cbf4 (diff)
parent7ebcaef6237fb00eeaed37a6187148e0b0bbe2e1 (diff)
Merge "Clear binder identity for UserManager calls"
-rw-r--r--services/core/java/com/android/server/location/UserInfoStore.java43
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;