diff options
| author | 2017-04-20 13:52:35 +0000 | |
|---|---|---|
| committer | 2017-04-20 13:52:35 +0000 | |
| commit | 372edc3b7d553fa77d15b51ae1809f2736aa04c2 (patch) | |
| tree | c8dae225dd59a5065cbc0a55aa8dee46033d8e0a | |
| parent | 3ff96e5dd806f6ce608248f5698fbebdcec4f58c (diff) | |
| parent | d9bfb83d9672fcb31fd050bb3b998915310eb6da (diff) | |
Merge "Make tetherChangePermission to be secured for AppOps permission" am: fe86a197a1 am: 0d1f04384f
am: d9bfb83d96
Change-Id: I6dd418684b1a40292cd496ead3613cf938577c09
| -rw-r--r-- | core/java/android/net/ConnectivityManager.java | 34 | ||||
| -rw-r--r-- | core/java/android/net/IConnectivityManager.aidl | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/ConnectivityService.java | 24 |
3 files changed, 44 insertions, 25 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index c93b933b160e..faed64c241d3 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -1880,8 +1880,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) @@ -1890,8 +1894,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 */); } } @@ -2016,7 +2022,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(); } @@ -2042,7 +2050,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(); } @@ -2133,7 +2143,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); @@ -2153,7 +2165,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(); } @@ -2238,7 +2252,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(); } diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 425e49407827..63a1f0513e20 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -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); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 4e2f39600823..d77297075652 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2821,8 +2821,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; @@ -2833,8 +2833,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); @@ -2888,8 +2888,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 { @@ -2948,8 +2948,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; @@ -2958,8 +2959,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); } @@ -5337,8 +5338,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); } } |