summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEtienne Ruffieux <eruffieux@google.com>2022-03-04 14:24:26 +0000
committerEtienne Ruffieux <eruffieux@google.com>2022-03-07 14:13:57 +0000
commit4808f6ade614bcd99ca0f9d937bbcc9c30970975 (patch)
tree8d162a30973bc138fb74b619a8a3b1771441021c
parentcbfde9f5c58852e610ec2575e05580556d0a5402 (diff)
Added missing profile owner check to enable/disable
Bug: 222662836 Test: atest Tag: #feature Ignore-AOSP-First: Restriction only in internal for now Change-Id: Ib46ce38699ab5795b23ace594a5ad19efd66ecbc
-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 {