summaryrefslogtreecommitdiff
path: root/service/java/com/android/server/bluetooth/BluetoothManagerService.java
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-08 02:08:28 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-08 02:08:28 +0000
commit22389fee67a014fed221aadadcfbc1dc9cd7335f (patch)
tree24b5864c0fccfd1ae7549e3616dbc5ee1aa5bafb /service/java/com/android/server/bluetooth/BluetoothManagerService.java
parent4739b8feb4c2a5becbb584b1f62f0e5321079d17 (diff)
parentc4c4f9227fb198e838b5b7de5d1a048f2d3a0c52 (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.java40
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 {