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

Commit c25c32c5 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." into rvc-dev am: 543fcd8b

Change-Id: I5b44ff9afedcf40d82ba0c4666b2b16e72583383
parents 72e42fd0 543fcd8b
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
@@ -6788,6 +6788,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 =