Loading core/java/android/net/ConnectivityManager.java +25 −9 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 */); } } Loading Loading @@ -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(); } Loading @@ -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(); } Loading Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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(); } Loading core/java/android/net/IConnectivityManager.aidl +6 −5 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -95,7 +96,7 @@ interface IConnectivityManager String[] getTetherableBluetoothRegexs(); int setUsbTethering(boolean enable); int setUsbTethering(boolean enable, String callerPkg); void reportInetCondition(int networkType, int percentage); Loading services/core/java/com/android/server/ConnectivityService.java +13 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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; Loading @@ -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); } Loading Loading @@ -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); } } Loading Loading
core/java/android/net/ConnectivityManager.java +25 −9 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 */); } } Loading Loading @@ -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(); } Loading @@ -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(); } Loading Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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(); } Loading
core/java/android/net/IConnectivityManager.aidl +6 −5 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -95,7 +96,7 @@ interface IConnectivityManager String[] getTetherableBluetoothRegexs(); int setUsbTethering(boolean enable); int setUsbTethering(boolean enable, String callerPkg); void reportInetCondition(int networkType, int percentage); Loading
services/core/java/com/android/server/ConnectivityService.java +13 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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 { Loading Loading @@ -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; Loading @@ -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); } Loading Loading @@ -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); } } Loading