diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-03-08 02:08:28 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-03-08 02:08:28 +0000 |
commit | 22389fee67a014fed221aadadcfbc1dc9cd7335f (patch) | |
tree | 24b5864c0fccfd1ae7549e3616dbc5ee1aa5bafb /service/java/com/android/server/bluetooth/BluetoothManagerService.java | |
parent | 4739b8feb4c2a5becbb584b1f62f0e5321079d17 (diff) | |
parent | c4c4f9227fb198e838b5b7de5d1a048f2d3a0c52 (diff) |
Snap for 8270536 from c4c4f9227fb198e838b5b7de5d1a048f2d3a0c52 to tm-release
Change-Id: I11136ce6eeaed10d012ef29fb7c081cbc5c1ced2
Diffstat (limited to 'service/java/com/android/server/bluetooth/BluetoothManagerService.java')
-rw-r--r-- | service/java/com/android/server/bluetooth/BluetoothManagerService.java | 40 |
1 files changed, 33 insertions, 7 deletions
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java index e2fc938efd..5e27ee66d9 100644 --- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java +++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java @@ -58,7 +58,6 @@ import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; -import android.content.res.Resources; import android.database.ContentObserver; import android.os.BatteryStatsManager; import android.os.Binder; @@ -1231,9 +1230,11 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); - if (!isPrivileged(callingPid, callingUid) && !isDeviceOwner(callingUid, packageName) - && CompatChanges.isChangeEnabled(RESTRICT_ENABLE_DISABLE, callingUid) - && !isSystem(packageName, callingUid)) { + if (CompatChanges.isChangeEnabled(RESTRICT_ENABLE_DISABLE, callingUid) + && !isPrivileged(callingPid, callingUid) + && !isSystem(packageName, callingUid) + && !isDeviceOwner(callingUid, packageName) + && !isProfileOwner(callingUid, packageName)) { return false; } @@ -1272,9 +1273,11 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); - if (!isPrivileged(callingPid, callingUid) && !isDeviceOwner(callingUid, packageName) - && CompatChanges.isChangeEnabled(RESTRICT_ENABLE_DISABLE, callingUid) - && !isSystem(packageName, callingUid)) { + if (CompatChanges.isChangeEnabled(RESTRICT_ENABLE_DISABLE, callingUid) + && !isPrivileged(callingPid, callingUid) + && !isSystem(packageName, callingUid) + && !isDeviceOwner(callingUid, packageName) + && !isProfileOwner(callingUid, packageName)) { return false; } @@ -3093,6 +3096,7 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { Log.e(TAG, "isDeviceOwner: packageName is null, returning false"); return false; } + Pair<UserHandle, ComponentName> deviceOwner = getDeviceOwner(); // no device owner @@ -3102,6 +3106,28 @@ public class BluetoothManagerService extends IBluetoothManager.Stub { && deviceOwner.second.getPackageName().equals(packageName); } + private boolean isProfileOwner(int uid, String packageName) { + Context userContext; + try { + userContext = mContext.createPackageContextAsUser(mContext.getPackageName(), 0, + UserHandle.getUserHandleForUid(uid)); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "Unknown package name"); + return false; + } + if (userContext == null) { + Log.e(TAG, "Unable to retrieve user context for " + uid); + return false; + } + DevicePolicyManager devicePolicyManager = + userContext.getSystemService(DevicePolicyManager.class); + if (devicePolicyManager == null) { + Log.w(TAG, "Error retrieving DPM service"); + return false; + } + return devicePolicyManager.isProfileOwnerApp(packageName); + } + public boolean isSystem(String packageName, int uid) { long ident = Binder.clearCallingIdentity(); try { |