summaryrefslogtreecommitdiff
path: root/service/java/com/android/server/bluetooth/BluetoothManagerService.java
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2022-03-07 17:46:18 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-03-07 17:46:18 +0000
commitf9de02ab71e56ae813592ce3217e70f44e13f335 (patch)
treefa76a9a04d181ee005963f40dd997e41731d1d6b /service/java/com/android/server/bluetooth/BluetoothManagerService.java
parent2e3ae6ef4cf2267979bd3bb2947195f0666cb0f7 (diff)
parent4808f6ade614bcd99ca0f9d937bbcc9c30970975 (diff)
Merge "Added missing profile owner check to enable/disable" into tm-dev
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 {