Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eada3b2d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Only call getActiveAdminForCallerLocked when holding a lock"

parents 64c9c804 2560f6f8
Loading
Loading
Loading
Loading
+30 −66
Original line number Original line Diff line number Diff line
@@ -5190,6 +5190,12 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
        }
    }
    }
    private void enforceDeviceOwner(ComponentName who) {
        synchronized (getLockObject()) {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
    }
    private void enforceProfileOrDeviceOwner(ComponentName who) {
    private void enforceProfileOrDeviceOwner(ComponentName who) {
        synchronized (getLockObject()) {
        synchronized (getLockObject()) {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
@@ -5364,9 +5370,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            }
            }
        } else {
        } else {
            // Caller provided - check it is the device owner.
            // Caller provided - check it is the device owner.
            synchronized (getLockObject()) {
            enforceDeviceOwner(who);
                getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
            }
        }
        }
    }
    }
@@ -6374,9 +6378,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public void setRecommendedGlobalProxy(ComponentName who, ProxyInfo proxyInfo) {
    public void setRecommendedGlobalProxy(ComponentName who, ProxyInfo proxyInfo) {
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        long token = mInjector.binderClearCallingIdentity();
        long token = mInjector.binderClearCallingIdentity();
        try {
        try {
            ConnectivityManager connectivityManager = (ConnectivityManager)
            ConnectivityManager connectivityManager = (ConnectivityManager)
@@ -7729,11 +7731,10 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public void setProfileName(ComponentName who, String profileName) {
    public void setProfileName(ComponentName who, String profileName) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        int userId = UserHandle.getCallingUserId();
        enforceProfileOrDeviceOwner(who);
        // Check if this is the profile owner (includes device owner).
        getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
        long id = mInjector.binderClearCallingIdentity();
        final int userId = UserHandle.getCallingUserId();
        final long id = mInjector.binderClearCallingIdentity();
        try {
        try {
            mUserManager.setUserName(userId, profileName);
            mUserManager.setUserName(userId, profileName);
        } finally {
        } finally {
@@ -8198,9 +8199,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public void setDefaultSmsApplication(ComponentName admin, String packageName) {
    public void setDefaultSmsApplication(ComponentName admin, String packageName) {
        Preconditions.checkNotNull(admin, "ComponentName is null");
        Preconditions.checkNotNull(admin, "ComponentName is null");
        synchronized (getLockObject()) {
        enforceDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        mInjector.binderWithCleanCallingIdentity(() ->
        mInjector.binderWithCleanCallingIdentity(() ->
                SmsApplication.setDefaultApplication(packageName, mContext));
                SmsApplication.setDefaultApplication(packageName, mContext));
    }
    }
@@ -8987,10 +8986,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    public boolean removeUser(ComponentName who, UserHandle userHandle) {
    public boolean removeUser(ComponentName who, UserHandle userHandle) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        enforceDeviceOwner(who);
        synchronized (getLockObject()) {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        final long id = mInjector.binderClearCallingIdentity();
        final long id = mInjector.binderClearCallingIdentity();
@@ -9050,10 +9046,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    public int startUserInBackground(ComponentName who, UserHandle userHandle) {
    public int startUserInBackground(ComponentName who, UserHandle userHandle) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        enforceDeviceOwner(who);
        synchronized (getLockObject()) {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final int userId = userHandle.getIdentifier();
        final int userId = userHandle.getIdentifier();
        if (isManagedProfile(userId)) {
        if (isManagedProfile(userId)) {
@@ -9085,10 +9078,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    public int stopUser(ComponentName who, UserHandle userHandle) {
    public int stopUser(ComponentName who, UserHandle userHandle) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        Preconditions.checkNotNull(userHandle, "UserHandle is null");
        enforceDeviceOwner(who);
        synchronized (getLockObject()) {
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final int userId = userHandle.getIdentifier();
        final int userId = userHandle.getIdentifier();
        if (isManagedProfile(userId)) {
        if (isManagedProfile(userId)) {
@@ -9156,9 +9146,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public List<UserHandle> getSecondaryUsers(ComponentName who) {
    public List<UserHandle> getSecondaryUsers(ComponentName who) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final long id = mInjector.binderClearCallingIdentity();
        final long id = mInjector.binderClearCallingIdentity();
        try {
        try {
@@ -9180,9 +9168,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public boolean isEphemeralUser(ComponentName who) {
    public boolean isEphemeralUser(ComponentName who) {
        Preconditions.checkNotNull(who, "ComponentName is null");
        Preconditions.checkNotNull(who, "ComponentName is null");
        synchronized (getLockObject()) {
        enforceProfileOrDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
        }
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        final long id = mInjector.binderClearCallingIdentity();
        final long id = mInjector.binderClearCallingIdentity();
@@ -10001,7 +9987,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public boolean setTime(ComponentName who, long millis) {
    public boolean setTime(ComponentName who, long millis) {
        Preconditions.checkNotNull(who, "ComponentName is null in setTime");
        Preconditions.checkNotNull(who, "ComponentName is null in setTime");
        getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        enforceDeviceOwner(who);
        // Don't allow set time when auto time is on.
        // Don't allow set time when auto time is on.
        if (mInjector.settingsGlobalGetInt(Global.AUTO_TIME, 0) == 1) {
        if (mInjector.settingsGlobalGetInt(Global.AUTO_TIME, 0) == 1) {
            return false;
            return false;
@@ -10013,7 +9999,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public boolean setTimeZone(ComponentName who, String timeZone) {
    public boolean setTimeZone(ComponentName who, String timeZone) {
        Preconditions.checkNotNull(who, "ComponentName is null in setTimeZone");
        Preconditions.checkNotNull(who, "ComponentName is null in setTimeZone");
        getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        enforceDeviceOwner(who);
        // Don't allow set timezone when auto timezone is on.
        // Don't allow set timezone when auto timezone is on.
        if (mInjector.settingsGlobalGetInt(Global.AUTO_TIME_ZONE, 0) == 1) {
        if (mInjector.settingsGlobalGetInt(Global.AUTO_TIME_ZONE, 0) == 1) {
            return false;
            return false;
@@ -11114,9 +11100,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public String getWifiMacAddress(ComponentName admin) {
    public String getWifiMacAddress(ComponentName admin) {
        // Make sure caller has DO.
        // Make sure caller has DO.
        synchronized (getLockObject()) {
        enforceDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final long ident = mInjector.binderClearCallingIdentity();
        final long ident = mInjector.binderClearCallingIdentity();
        try {
        try {
@@ -11154,9 +11138,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    @Override
    @Override
    public boolean isSystemOnlyUser(ComponentName admin) {
    public boolean isSystemOnlyUser(ComponentName admin) {
        synchronized (getLockObject()) {
        enforceDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        final int callingUserId = mInjector.userHandleGetCallingUserId();
        return UserManager.isSplitSystemUser() && callingUserId == UserHandle.USER_SYSTEM;
        return UserManager.isSplitSystemUser() && callingUserId == UserHandle.USER_SYSTEM;
    }
    }
@@ -11165,9 +11147,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
    public void reboot(ComponentName admin) {
    public void reboot(ComponentName admin) {
        Preconditions.checkNotNull(admin);
        Preconditions.checkNotNull(admin);
        // Make sure caller has DO.
        // Make sure caller has DO.
        synchronized (getLockObject()) {
        enforceDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        long ident = mInjector.binderClearCallingIdentity();
        long ident = mInjector.binderClearCallingIdentity();
        try {
        try {
            // Make sure there are no ongoing calls on the device.
            // Make sure there are no ongoing calls on the device.
@@ -11986,9 +11966,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return false;
            return false;
        }
        }
        Preconditions.checkNotNull(admin);
        Preconditions.checkNotNull(admin);
        synchronized (getLockObject()) {
        enforceDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        final int callingUid = mInjector.binderGetCallingUid();
        final int callingUid = mInjector.binderGetCallingUid();
        final AtomicBoolean success = new AtomicBoolean(false);
        final AtomicBoolean success = new AtomicBoolean(false);
@@ -12601,9 +12579,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        Preconditions.checkNotNull(admin, "ComponentName is null");
        Preconditions.checkNotNull(admin, "ComponentName is null");
        Preconditions.checkNotNull(packageName, "packageName is null");
        Preconditions.checkNotNull(packageName, "packageName is null");
        Preconditions.checkNotNull(callback, "callback is null");
        Preconditions.checkNotNull(callback, "callback is null");
        synchronized (getLockObject()) {
        enforceProfileOrDeviceOwner(admin);
            getActiveAdminForCallerLocked(admin, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
        }
        final int userId = UserHandle.getCallingUserId();
        final int userId = UserHandle.getCallingUserId();
        long ident = mInjector.binderClearCallingIdentity();
        long ident = mInjector.binderClearCallingIdentity();
@@ -12911,9 +12887,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in addOverrideApn");
        Preconditions.checkNotNull(who, "ComponentName is null in addOverrideApn");
        Preconditions.checkNotNull(apnSetting, "ApnSetting is null in addOverrideApn");
        Preconditions.checkNotNull(apnSetting, "ApnSetting is null in addOverrideApn");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        int operatedId = -1;
        int operatedId = -1;
        Uri resultUri;
        Uri resultUri;
@@ -12942,9 +12916,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in updateOverrideApn");
        Preconditions.checkNotNull(who, "ComponentName is null in updateOverrideApn");
        Preconditions.checkNotNull(apnSetting, "ApnSetting is null in updateOverrideApn");
        Preconditions.checkNotNull(apnSetting, "ApnSetting is null in updateOverrideApn");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        if (apnId < 0) {
        if (apnId < 0) {
            return false;
            return false;
@@ -12965,9 +12937,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return false;
            return false;
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in removeOverrideApn");
        Preconditions.checkNotNull(who, "ComponentName is null in removeOverrideApn");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        return removeOverrideApnUnchecked(apnId);
        return removeOverrideApnUnchecked(apnId);
    }
    }
@@ -12993,9 +12963,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return Collections.emptyList();
            return Collections.emptyList();
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in getOverrideApns");
        Preconditions.checkNotNull(who, "ComponentName is null in getOverrideApns");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        return getOverrideApnsUnchecked();
        return getOverrideApnsUnchecked();
    }
    }
@@ -13031,9 +12999,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return;
            return;
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in setOverrideApnEnabled");
        Preconditions.checkNotNull(who, "ComponentName is null in setOverrideApnEnabled");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        setOverrideApnsEnabledUnchecked(enabled);
        setOverrideApnsEnabledUnchecked(enabled);
    }
    }
@@ -13056,9 +13022,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
            return false;
            return false;
        }
        }
        Preconditions.checkNotNull(who, "ComponentName is null in isOverrideApnEnabled");
        Preconditions.checkNotNull(who, "ComponentName is null in isOverrideApnEnabled");
        synchronized (getLockObject()) {
        enforceDeviceOwner(who);
            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
        }
        Cursor enforceCursor;
        Cursor enforceCursor;
        final long id = mInjector.binderClearCallingIdentity();
        final long id = mInjector.binderClearCallingIdentity();