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

Commit 9eacc855 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Protect ConnectivityService from SecurityException in permission...

Merge "Protect ConnectivityService from SecurityException in permission check." am: 4637a72f am: be9624a8 am: 2abd8792 am: 40ad49e8 am: b2085a8e

Change-Id: I5cd9560ab3e0e7be0f85a4c2cd0ddc46a50e508e
parents bdbca8cb b2085a8e
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -7892,10 +7892,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return true;
        }

        // LocationPermissionChecker#checkLocationPermission can throw SecurityException if the uid
        // and package name don't match. Throwing on the CS thread is not acceptable, so wrap the
        // call in a try-catch.
        try {
            if (!mLocationPermissionChecker.checkLocationPermission(
                    callbackPackageName, null /* featureId */, callbackUid, null /* message */)) {
                return false;
            }
        } catch (SecurityException e) {
            return false;
        }

        synchronized (mVpns) {
            if (getVpnIfOwner(callbackUid) != null) {
+20 −0
Original line number Diff line number Diff line
@@ -6756,6 +6756,26 @@ public class ConnectivityServiceTest {
                        mContext.getOpPackageName()));
    }

    @Test
    public void testCheckConnectivityDiagnosticsPermissionsWrongUidPackageName() throws Exception {
        final NetworkAgentInfo naiWithoutUid =
                new NetworkAgentInfo(
                        null, null, null, null, null, new NetworkCapabilities(), 0,
                        mServiceContext, null, null, mService, null, null, null, 0);

        mServiceContext.setPermission(android.Manifest.permission.NETWORK_STACK, PERMISSION_DENIED);

        try {
            assertFalse(
                    "Mismatched uid/package name should not pass the location permission check",
                    mService.checkConnectivityDiagnosticsPermissions(
                            Process.myPid() + 1, Process.myUid() + 1, naiWithoutUid,
                            mContext.getOpPackageName()));
        } catch (SecurityException e) {
            fail("checkConnectivityDiagnosticsPermissions shouldn't surface a SecurityException");
        }
    }

    @Test
    public void testCheckConnectivityDiagnosticsPermissionsNoLocationPermission() throws Exception {
        final NetworkAgentInfo naiWithoutUid =