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

Commit f5845d14 authored by Lorenzo Colitti's avatar Lorenzo Colitti
Browse files

Change permissions checks for setAirplaneMode.

Require NETWORK_SETTINGS (or NETWORK_SETUP_WIZARD) instead of the
legacy CONNECTIVITY_INTERNAL permission. The users are as follows:

- The system callers (Phone, Settings, SystemUI, VrSettings) all
  have NETWORK_SETTINGS.
- SetupWizard has NETWORK_SETUP_WIZARD
- sl4a has NETWORK_STACK

Bug: 115302596
Test: builds, boots, airplane mode via SystemUI works
Change-Id: I8ca40182bd8b5e3fd9a82296c0cc28de30ed4baf
parent 85eca488
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2727,7 +2727,10 @@ public class ConnectivityManager {
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
    @RequiresPermission(anyOf = {
            android.Manifest.permission.NETWORK_SETTINGS,
            android.Manifest.permission.NETWORK_SETUP_WIZARD,
            android.Manifest.permission.NETWORK_STACK})
    @SystemApi
    public void setAirplaneMode(boolean enable) {
        try {
+18 −1
Original line number Diff line number Diff line
@@ -1679,6 +1679,16 @@ public class ConnectivityService extends IConnectivityManager.Stub
                "ConnectivityService");
    }

    private void enforceAnyPermissionOf(String... permissions) {
        for (String permission : permissions) {
            if (mContext.checkCallingOrSelfPermission(permission) == PERMISSION_GRANTED) {
                return;
            }
        }
        throw new SecurityException(
            "Requires one of the following permissions: " + String.join(", ", permissions) + ".");
    }

    private void enforceInternetPermission() {
        mContext.enforceCallingOrSelfPermission(
                android.Manifest.permission.INTERNET,
@@ -1723,6 +1733,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
                "ConnectivityService");
    }

    private void enforceNetworkStackSettingsOrSetup() {
        enforceAnyPermissionOf(
            android.Manifest.permission.NETWORK_SETTINGS,
            android.Manifest.permission.NETWORK_SETUP_WIZARD,
            android.Manifest.permission.NETWORK_STACK);
    }

    private boolean checkNetworkStackPermission() {
        return PERMISSION_GRANTED == mContext.checkCallingOrSelfPermission(
                android.Manifest.permission.NETWORK_STACK);
@@ -4008,7 +4025,7 @@ public class ConnectivityService extends IConnectivityManager.Stub

    @Override
    public void setAirplaneMode(boolean enable) {
        enforceConnectivityInternalPermission();
        enforceNetworkStackSettingsOrSetup();
        final long ident = Binder.clearCallingIdentity();
        try {
            final ContentResolver cr = mContext.getContentResolver();