From 81a47cd688e5b3c140aac23e467a3ded83b36e9f Mon Sep 17 00:00:00 2001 From: Alex Chau Date: Tue, 2 Jan 2018 16:49:14 +0000 Subject: [PATCH] Clear calling identity when calling getPackageInfo in AMS.isSystemUid - Without this, calling removeAccount in secondary user will crash, as the calling app may not have the permission required by getPackageInfo Bug: 65280359 Test: Remove account from profile owner is successful Change-Id: I4e5931732fd6797bb8429e8fa772022018e878c2 --- .../accounts/AccountManagerService.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 31aea63875ea4..46eea78c7f8bf 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -5595,25 +5595,26 @@ public class AccountManagerService long ident = Binder.clearCallingIdentity(); try { packages = mPackageManager.getPackagesForUid(callingUid); + if (packages != null) { + for (String name : packages) { + try { + PackageInfo packageInfo = + mPackageManager.getPackageInfo(name, 0 /* flags */); + if (packageInfo != null + && (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) + != 0) { + return true; + } + } catch (NameNotFoundException e) { + Log.w(TAG, String.format("Could not find package [%s]", name), e); + } + } + } else { + Log.w(TAG, "No known packages with uid " + callingUid); + } } finally { Binder.restoreCallingIdentity(ident); } - if (packages != null) { - for (String name : packages) { - try { - PackageInfo packageInfo = mPackageManager.getPackageInfo(name, 0 /* flags */); - if (packageInfo != null - && (packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) - != 0) { - return true; - } - } catch (NameNotFoundException e) { - Log.w(TAG, String.format("Could not find package [%s]", name), e); - } - } - } else { - Log.w(TAG, "No known packages with uid " + callingUid); - } return false; }