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

Commit fe86a197 authored by Erik Kline's avatar Erik Kline Committed by Gerrit Code Review
Browse files

Merge "Make tetherChangePermission to be secured for AppOps permission"

parents 0a4dc6a5 335d2ede
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -1862,8 +1862,12 @@ public class ConnectivityManager {
                .getPackageNameForUid(context, uid), true /* throwException */);
    }

    /** {@hide */
    public static final void enforceTetherChangePermission(Context context) {
    /** {@hide} */
    public static final void enforceTetherChangePermission(Context context, String callingPkg) {
        if (null == context || null == callingPkg) {
            throw new IllegalArgumentException("arguments should not be null");
        }

        if (context.getResources().getStringArray(
                com.android.internal.R.array.config_mobile_hotspot_provision_app).length == 2) {
            // Have a provisioning app - must only let system apps (which check this app)
@@ -1872,8 +1876,10 @@ public class ConnectivityManager {
                    android.Manifest.permission.TETHER_PRIVILEGED, "ConnectivityService");
        } else {
            int uid = Binder.getCallingUid();
            Settings.checkAndNoteWriteSettingsOperation(context, uid, Settings
                    .getPackageNameForUid(context, uid), true /* throwException */);
            // If callingPkg's uid is not same as Binder.getCallingUid(),
            // AppOpsService throws SecurityException.
            Settings.checkAndNoteWriteSettingsOperation(context, uid, callingPkg,
                    true /* throwException */);
        }
    }

@@ -1996,7 +2002,9 @@ public class ConnectivityManager {
     */
    public int tether(String iface) {
        try {
            return mService.tether(iface);
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "tether caller:" + pkgName);
            return mService.tether(iface, pkgName);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -2022,7 +2030,9 @@ public class ConnectivityManager {
     */
    public int untether(String iface) {
        try {
            return mService.untether(iface);
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "untether caller:" + pkgName);
            return mService.untether(iface, pkgName);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -2113,7 +2123,9 @@ public class ConnectivityManager {
        };

        try {
            mService.startTethering(type, wrappedCallback, showProvisioningUi);
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "startTethering caller:" + pkgName);
            mService.startTethering(type, wrappedCallback, showProvisioningUi, pkgName);
        } catch (RemoteException e) {
            Log.e(TAG, "Exception trying to start tethering.", e);
            wrappedCallback.send(TETHER_ERROR_SERVICE_UNAVAIL, null);
@@ -2133,7 +2145,9 @@ public class ConnectivityManager {
    @SystemApi
    public void stopTethering(int type) {
        try {
            mService.stopTethering(type);
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "stopTethering caller:" + pkgName);
            mService.stopTethering(type, pkgName);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
@@ -2218,7 +2232,9 @@ public class ConnectivityManager {
     */
    public int setUsbTethering(boolean enable) {
        try {
            return mService.setUsbTethering(enable);
            String pkgName = mContext.getOpPackageName();
            Log.i(TAG, "setUsbTethering caller:" + pkgName);
            return mService.setUsbTethering(enable, pkgName);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
+6 −5
Original line number Diff line number Diff line
@@ -69,17 +69,18 @@ interface IConnectivityManager

    boolean requestRouteToHostAddress(int networkType, in byte[] hostAddress);

    int tether(String iface);
    int tether(String iface, String callerPkg);

    int untether(String iface);
    int untether(String iface, String callerPkg);

    int getLastTetherError(String iface);

    boolean isTetheringSupported();

    void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi);
    void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi,
            String callerPkg);

    void stopTethering(int type);
    void stopTethering(int type, String callerPkg);

    String[] getTetherableIfaces();

@@ -95,7 +96,7 @@ interface IConnectivityManager

    String[] getTetherableBluetoothRegexs();

    int setUsbTethering(boolean enable);
    int setUsbTethering(boolean enable, String callerPkg);

    void reportInetCondition(int networkType, int percentage);

+13 −11
Original line number Diff line number Diff line
@@ -2949,8 +2949,8 @@ public class ConnectivityService extends IConnectivityManager.Stub

    // javadoc from interface
    @Override
    public int tether(String iface) {
        ConnectivityManager.enforceTetherChangePermission(mContext);
    public int tether(String iface, String callerPkg) {
        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);
        if (isTetheringSupported()) {
            final int status = mTethering.tether(iface);
            return status;
@@ -2961,8 +2961,8 @@ public class ConnectivityService extends IConnectivityManager.Stub

    // javadoc from interface
    @Override
    public int untether(String iface) {
        ConnectivityManager.enforceTetherChangePermission(mContext);
    public int untether(String iface, String callerPkg) {
        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);

        if (isTetheringSupported()) {
            final int status = mTethering.untether(iface);
@@ -3016,8 +3016,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }

    @Override
    public int setUsbTethering(boolean enable) {
        ConnectivityManager.enforceTetherChangePermission(mContext);
    public int setUsbTethering(boolean enable, String callerPkg) {
        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);
        if (isTetheringSupported()) {
            return mTethering.setUsbTethering(enable);
        } else {
@@ -3076,8 +3076,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }

    @Override
    public void startTethering(int type, ResultReceiver receiver, boolean showProvisioningUi) {
        ConnectivityManager.enforceTetherChangePermission(mContext);
    public void startTethering(int type, ResultReceiver receiver, boolean showProvisioningUi,
            String callerPkg) {
        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);
        if (!isTetheringSupported()) {
            receiver.send(ConnectivityManager.TETHER_ERROR_UNSUPPORTED, null);
            return;
@@ -3086,8 +3087,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
    }

    @Override
    public void stopTethering(int type) {
        ConnectivityManager.enforceTetherChangePermission(mContext);
    public void stopTethering(int type, String callerPkg) {
        ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg);
        mTethering.stopTethering(type);
    }

@@ -5465,8 +5466,9 @@ public class ConnectivityService extends IConnectivityManager.Stub

        if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_TETHERING)) {
            // Untether
            String pkgName = mContext.getOpPackageName();
            for (String tether : getTetheredIfaces()) {
                untether(tether);
                untether(tether, pkgName);
            }
        }