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

Commit b2085a8e 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

Change-Id: Ib0d526dfcaca9805cdd12f775dc9571621f9dfaa
parents 24c86561 40ad49e8
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -7892,10 +7892,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
            return true;
            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(
            if (!mLocationPermissionChecker.checkLocationPermission(
                    callbackPackageName, null /* featureId */, callbackUid, null /* message */)) {
                    callbackPackageName, null /* featureId */, callbackUid, null /* message */)) {
                return false;
                return false;
            }
            }
        } catch (SecurityException e) {
            return false;
        }


        synchronized (mVpns) {
        synchronized (mVpns) {
            if (getVpnIfOwner(callbackUid) != null) {
            if (getVpnIfOwner(callbackUid) != null) {
+20 −0
Original line number Original line Diff line number Diff line
@@ -6756,6 +6756,26 @@ public class ConnectivityServiceTest {
                        mContext.getOpPackageName()));
                        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
    @Test
    public void testCheckConnectivityDiagnosticsPermissionsNoLocationPermission() throws Exception {
    public void testCheckConnectivityDiagnosticsPermissionsNoLocationPermission() throws Exception {
        final NetworkAgentInfo naiWithoutUid =
        final NetworkAgentInfo naiWithoutUid =