summaryrefslogtreecommitdiffstats
path: root/services/devicepolicy
diff options
context:
space:
mode:
authorRubin Xu <rubinxu@google.com>2015-05-14 13:48:35 +0100
committerRubin Xu <rubinxu@google.com>2015-05-14 13:48:35 +0100
commit2c84cc2ea2ffa1fcd3dbd9a1b5e3880571fba1b8 (patch)
tree355b6cf31b2a8cfa7fc9b14b0f07da968465b205 /services/devicepolicy
parentc454f786e2301b26afee3809a293a7fadd65434a (diff)
downloadframeworks_base-2c84cc2ea2ffa1fcd3dbd9a1b5e3880571fba1b8.zip
frameworks_base-2c84cc2ea2ffa1fcd3dbd9a1b5e3880571fba1b8.tar.gz
frameworks_base-2c84cc2ea2ffa1fcd3dbd9a1b5e3880571fba1b8.tar.bz2
clear caller identify before sending system update notification
Because DeviceAdminReceiver is protected by BIND_DEVICE_ADMIN permission, in order to send broadcast to it, we need to clear the caller's identity and call sendBroadcastAsUser() as system. Bug: 20213644 Change-Id: Icc7b239b9005e286012ade6580ec92a0a57198e0
Diffstat (limited to 'services/devicepolicy')
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java14
1 files changed, 10 insertions, 4 deletions
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 67c198f..3ac09d2 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -6296,10 +6296,16 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return;
}
+ ActivityInfo[] receivers = null;
try {
- ActivityInfo[] receivers = mContext.getPackageManager().getPackageInfo(
+ receivers = mContext.getPackageManager().getPackageInfo(
deviceOwnerPackage, PackageManager.GET_RECEIVERS).receivers;
- if (receivers != null) {
+ } catch (NameNotFoundException e) {
+ Log.e(LOG_TAG, "Cannot find device owner package", e);
+ }
+ if (receivers != null) {
+ long ident = Binder.clearCallingIdentity();
+ try {
for (int i = 0; i < receivers.length; i++) {
if (permission.BIND_DEVICE_ADMIN.equals(receivers[i].permission)) {
intent.setComponent(new ComponentName(deviceOwnerPackage,
@@ -6307,9 +6313,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
mContext.sendBroadcastAsUser(intent, UserHandle.OWNER);
}
}
+ } finally {
+ Binder.restoreCallingIdentity(ident);
}
- } catch (NameNotFoundException e) {
- Log.e(LOG_TAG, "Cannot find device owner package", e);
}
}
}