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

Commit 59148b79 authored by paulhu's avatar paulhu
Browse files

Replace the permission of internal connectivity checks

A number of connectivity checks that protect system-only methods
check for CONNECTIVITY_INTERNAL, but CONNECTIVITY_INTERNAL is a
signature|privileged permission. We should audit the permission
checks, and convert checks that protect code that should not be
called outside the system to a signature permission. So replace
all CONNECTIVITY_INTERNAL to other proper permissions.

Bug: 32963470
Test: atest FrameworksNetTests NetworkPolicyManagerServiceTest
Change-Id: I8f2dd1cd0609056494eaf612d39820e273ae093f
Merged-In: I8f2dd1cd0609056494eaf612d39820e273ae093f
parent 254411a9
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ package android {
    field public static final String CHANGE_DEVICE_IDLE_TEMP_WHITELIST = "android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST";
    field public static final String CLEAR_APP_USER_DATA = "android.permission.CLEAR_APP_USER_DATA";
    field public static final String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS";
    field public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
    field @Deprecated public static final String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL";
    field public static final String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS";
    field public static final String CONTROL_DISPLAY_COLOR_TRANSFORMS = "android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS";
    field public static final String CONTROL_DISPLAY_SATURATION = "android.permission.CONTROL_DISPLAY_SATURATION";
@@ -123,6 +123,7 @@ package android {
    field public static final String MODIFY_QUIET_MODE = "android.permission.MODIFY_QUIET_MODE";
    field public static final String MOVE_PACKAGE = "android.permission.MOVE_PACKAGE";
    field public static final String NETWORK_CARRIER_PROVISIONING = "android.permission.NETWORK_CARRIER_PROVISIONING";
    field public static final String NETWORK_FACTORY = "android.permission.NETWORK_FACTORY";
    field public static final String NETWORK_MANAGED_PROVISIONING = "android.permission.NETWORK_MANAGED_PROVISIONING";
    field public static final String NETWORK_SCAN = "android.permission.NETWORK_SCAN";
    field public static final String NETWORK_SETUP_WIZARD = "android.permission.NETWORK_SETUP_WIZARD";
@@ -130,6 +131,7 @@ package android {
    field public static final String NOTIFICATION_DURING_SETUP = "android.permission.NOTIFICATION_DURING_SETUP";
    field public static final String NOTIFY_TV_INPUTS = "android.permission.NOTIFY_TV_INPUTS";
    field public static final String OBSERVE_APP_USAGE = "android.permission.OBSERVE_APP_USAGE";
    field public static final String OBSERVE_NETWORK_POLICY = "android.permission.OBSERVE_NETWORK_POLICY";
    field public static final String OBSERVE_ROLE_HOLDERS = "android.permission.OBSERVE_ROLE_HOLDERS";
    field public static final String OPEN_ACCESSIBILITY_DETAILS_SETTINGS = "android.permission.OPEN_ACCESSIBILITY_DETAILS_SETTINGS";
    field public static final String OVERRIDE_WIFI_CONFIG = "android.permission.OVERRIDE_WIFI_CONFIG";
@@ -4068,7 +4070,7 @@ package android.net {
  public class ConnectivityManager {
    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createNattKeepalive(@NonNull android.net.Network, @NonNull android.os.ParcelFileDescriptor, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
    method @NonNull @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
    method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl();
    method @Deprecated @RequiresPermission("android.permission.NETWORK_SETTINGS") public String getCaptivePortalServerUrl();
    method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementResult(int, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEntitlementResultListener);
    method @RequiresPermission(anyOf={android.Manifest.permission.TETHER_PRIVILEGED, android.Manifest.permission.WRITE_SETTINGS}) public boolean isTetheringSupported();
    method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void registerTetheringEventCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.ConnectivityManager.OnTetheringEventCallback);
+16 −5
Original line number Diff line number Diff line
@@ -1006,7 +1006,7 @@ public class ConnectivityManager {
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
    @RequiresPermission(android.Manifest.permission.NETWORK_STACK)
    @Nullable
    public Network getActiveNetworkForUid(int uid) {
        return getActiveNetworkForUid(uid, false);
@@ -1135,7 +1135,7 @@ public class ConnectivityManager {
     *
     * {@hide}
     */
    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
    @RequiresPermission(android.Manifest.permission.NETWORK_STACK)
    @UnsupportedAppUsage
    public NetworkInfo getActiveNetworkInfoForUid(int uid) {
        return getActiveNetworkInfoForUid(uid, false);
@@ -1370,10 +1370,14 @@ public class ConnectivityManager {
     * The system network validation may be using different strategies to detect captive portals,
     * so this method does not necessarily return a URL used by the system. It only returns a URL
     * that may be relevant for other components trying to detect captive portals.
     *
     * @hide
     * @deprecated This API returns URL which is not guaranteed to be one of the URLs used by the
     *             system.
     */
    @Deprecated
    @SystemApi
    @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS)
    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
    public String getCaptivePortalServerUrl() {
        try {
            return mService.getCaptivePortalServerUrl();
@@ -2400,6 +2404,7 @@ public class ConnectivityManager {
     * @return an array of 0 or more {@code String} of tethered dhcp ranges.
     * {@hide}
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
    public String[] getTetheredDhcpRanges() {
        try {
            return mService.getTetheredDhcpRanges();
@@ -2979,7 +2984,7 @@ public class ConnectivityManager {
     *        HTTP proxy.  A {@code null} value will clear the global HTTP proxy.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
    @RequiresPermission(android.Manifest.permission.NETWORK_STACK)
    public void setGlobalProxy(ProxyInfo p) {
        try {
            mService.setGlobalProxy(p);
@@ -3124,6 +3129,7 @@ public class ConnectivityManager {
     * Get the mobile provisioning url.
     * {@hide}
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
    public String getMobileProvisioningUrl() {
        try {
            return mService.getMobileProvisioningUrl();
@@ -3170,6 +3176,7 @@ public class ConnectivityManager {

    /** {@hide} - returns the factory serial number */
    @UnsupportedAppUsage
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkFactory(Messenger messenger, String name) {
        try {
            return mService.registerNetworkFactory(messenger, name);
@@ -3180,6 +3187,7 @@ public class ConnectivityManager {

    /** {@hide} */
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public void unregisterNetworkFactory(Messenger messenger) {
        try {
            mService.unregisterNetworkFactory(messenger);
@@ -3197,6 +3205,7 @@ public class ConnectivityManager {
     * Register a NetworkAgent with ConnectivityService.
     * @return NetID corresponding to NetworkAgent.
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkMisc misc) {
        return registerNetworkAgent(messenger, ni, lp, nc, score, misc,
@@ -3208,6 +3217,7 @@ public class ConnectivityManager {
     * Register a NetworkAgent with ConnectivityService.
     * @return NetID corresponding to NetworkAgent.
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_FACTORY)
    public int registerNetworkAgent(Messenger messenger, NetworkInfo ni, LinkProperties lp,
            NetworkCapabilities nc, int score, NetworkMisc misc, int factorySerialNumber) {
        try {
@@ -4202,7 +4212,7 @@ public class ConnectivityManager {
     *
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.CONNECTIVITY_INTERNAL)
    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
    public void startCaptivePortalApp(Network network) {
        try {
            mService.startCaptivePortalApp(network);
@@ -4318,6 +4328,7 @@ public class ConnectivityManager {
     * Resets all connectivity manager settings back to factory defaults.
     * @hide
     */
    @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS)
    public void factoryReset() {
        try {
            mService.factoryReset();
+13 −1
Original line number Diff line number Diff line
@@ -1627,6 +1627,14 @@
    <permission android:name="android.permission.NETWORK_STACK"
        android:protectionLevel="signature" />

    <!-- @SystemApi @hide Allows an application to observe network policy changes. -->
    <permission android:name="android.permission.OBSERVE_NETWORK_POLICY"
                android:protectionLevel="signature" />

    <!-- @SystemApi @hide Allows applications to register network factory or agent -->
    <permission android:name="android.permission.NETWORK_FACTORY"
                android:protectionLevel="signature" />

    <!-- Allows Settings and SystemUI to call methods in Networking services
         <p>Not for use by third-party or privileged applications.
         @hide This should only be used by Settings and SystemUI.
@@ -1762,7 +1770,11 @@
    <permission android:name="android.permission.NFC_TRANSACTION_EVENT"
        android:protectionLevel="normal" />

    <!-- @SystemApi Allows an internal user to use privileged ConnectivityManager APIs.
    <!-- @deprecated This permission used to allow too broad access to sensitive methods and all its
         uses have been replaced by a more appropriate permission. Most uses have been replaced with
         a NETWORK_STACK or NETWORK_SETTINGS check. Please look up the documentation of the
         individual functions to figure out what permission now protects the individual function.
         @SystemApi Allows an internal user to use privileged ConnectivityManager APIs.
         @hide -->
    <permission android:name="android.permission.CONNECTIVITY_INTERNAL"
        android:protectionLevel="signature|privileged" />
+1 −1
Original line number Diff line number Diff line
@@ -508,7 +508,7 @@
        -->
    <string translatable="false" name="config_mobile_hotspot_provision_app_no_ui"></string>
    <!-- Sent in response to a provisioning check. The caller must hold the
         permission android.permission.CONNECTIVITY_INTERNAL for Settings to
         permission android.permission.TETHER_PRIVILEGED for Settings to
         receive this response.

         See config_mobile_hotspot_provision_response
+2 −2
Original line number Diff line number Diff line
@@ -73,9 +73,9 @@
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
    <!-- This permission is added for API call setAirplaneMode() in ConnectivityManager -->
    <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
    <uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
    <!-- This permission is added for API call setAirplaneMode() in ConnectivityManager -->
    <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DEVICE_POWER" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Loading