diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 3460f564fc..583cf32049 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -1125,6 +1125,7 @@ public class ConnectivityManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl() { try { return mService.getCaptivePortalServerUrl(); @@ -2088,10 +2089,11 @@ public class ConnectivityManager { * {@hide} */ @SystemApi - @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) + @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public boolean isTetheringSupported() { try { - return mService.isTetheringSupported(); + String pkgName = mContext.getOpPackageName(); + return mService.isTetheringSupported(pkgName); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -2121,6 +2123,7 @@ public class ConnectivityManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void startTethering(int type, boolean showProvisioningUi, final OnStartTetheringCallback callback) { startTethering(type, showProvisioningUi, callback, null); diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index b9dd207aaa..a6fe7389bc 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -75,7 +75,7 @@ interface IConnectivityManager int getLastTetherError(String iface); - boolean isTetheringSupported(); + boolean isTetheringSupported(String callerPkg); void startTethering(int type, in ResultReceiver receiver, boolean showProvisioningUi, String callerPkg); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 1f75b908f2..5c11100f34 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -2988,12 +2988,16 @@ public class ConnectivityService extends IConnectivityManager.Stub return mTethering.getTetheredDhcpRanges(); } + @Override + public boolean isTetheringSupported(String callerPkg) { + ConnectivityManager.enforceTetherChangePermission(mContext, callerPkg); + return isTetheringSupported(); + } + // if ro.tether.denied = true we default to no tethering // gservices could set the secure setting to 1 though to enable it on a build where it // had previously been turned off. - @Override - public boolean isTetheringSupported() { - enforceTetherAccessPermission(); + private boolean isTetheringSupported() { int defaultVal = encodeBool(!mSystemProperties.get("ro.tether.denied").equals("true")); boolean tetherSupported = toBool(Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.TETHER_SUPPORTED, defaultVal)); @@ -5464,6 +5468,7 @@ public class ConnectivityService extends IConnectivityManager.Stub @Override public String getCaptivePortalServerUrl() { + enforceConnectivityInternalPermission(); return NetworkMonitor.getCaptivePortalServerHttpUrl(mContext); }