From 826224dbc111effd15fdcbd2cd698cd0e6b7b34a Mon Sep 17 00:00:00 2001 From: lucaslin Date: Thu, 12 Mar 2020 13:23:52 +0800 Subject: [PATCH] Add enforceNetworkStackOrProfileOrDeviceOwner() Add enforceNetworkStackOrProfileOrDeviceOwner() to check if the caller has PERMISSION_MAINLINE_NETWORK_STACK or not. Call this check in isAlwaysOnVpnLockdownEnabled() for allowing the caller which has PERMISSION_MAINLINE_NETWORK_STACK to get the status of always-on VPN. Bug: 141621373 Test: 1. Build pass 2. Manual test to see if CaptivePortalLoginActivity could deal with the issue properly. Change-Id: I3b7ddc2543e6b4754d6eaac128ca9a8ccea6b59c --- .../devicepolicy/DevicePolicyManagerService.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 312d2d2e2ac26..918724f03f2f0 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -86,6 +86,7 @@ import static android.app.admin.DevicePolicyManager.WIPE_SILENTLY; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE; import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE; import static android.content.pm.PackageManager.MATCH_UNINSTALLED_PACKAGES; +import static android.net.NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK; import static android.provider.Settings.Global.PRIVATE_DNS_MODE; import static android.provider.Settings.Global.PRIVATE_DNS_SPECIFIER; import static android.provider.Telephony.Carriers.DPC_URI; @@ -5874,6 +5875,14 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } + private void enforceNetworkStackOrProfileOrDeviceOwner(ComponentName who) { + if (mContext.checkCallingPermission(PERMISSION_MAINLINE_NETWORK_STACK) + == PackageManager.PERMISSION_GRANTED) { + return; + } + enforceProfileOrDeviceOwner(who); + } + private void enforceDeviceOwnerOrProfileOwnerOnOrganizationOwnedDevice(ComponentName who) { synchronized (getLockObject()) { getActiveAdminForCallerLocked( @@ -6870,7 +6879,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { @Override public boolean isAlwaysOnVpnLockdownEnabled(ComponentName admin) throws SecurityException { - enforceProfileOrDeviceOwner(admin); + enforceNetworkStackOrProfileOrDeviceOwner(admin); final int userId = mInjector.userHandleGetCallingUserId(); return mInjector.binderWithCleanCallingIdentity(