From 08fc72d0317fd39a6fa0b2d47c6a5b1529309629 Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Thu, 20 Feb 2014 12:50:41 +0000 Subject: [PATCH] Check DeviceOwner exists before using packageName Creating a profile owner when there is no device owner present also creates a new DeviceOwner object without packageName set -- this situation can lead to a null pointer access when calling isDeviceOwner. Change-Id: I31eab498d78cadc67a1aedd205b458dee2d27705 --- .../server/devicepolicy/DevicePolicyManagerService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 12f0114691d56..f9a5e5d1543a7 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -1315,9 +1315,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } if (admin.getUid() != Binder.getCallingUid()) { // If trying to remove device owner, refuse when the caller is not the owner. - if (mDeviceOwner != null - && adminReceiver.getPackageName().equals( - mDeviceOwner.getDeviceOwnerPackageName())) { + if (isDeviceOwner(adminReceiver.getPackageName())) { return; } mContext.enforceCallingOrSelfPermission( @@ -2793,6 +2791,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } synchronized (this) { return mDeviceOwner != null + && mDeviceOwner.hasDeviceOwner() && mDeviceOwner.getDeviceOwnerPackageName().equals(packageName); } }