From 9a0b4d0d0a89757a4cad214046333094b7af9b59 Mon Sep 17 00:00:00 2001 From: Mathew Inwood Date: Mon, 2 Nov 2020 10:29:35 +0000 Subject: [PATCH 1/3] Add maxTargetSdk restriction to unused APIs. These are APIs that have @UnsupportedAppUsage but for which we don't have any evidence of them currently being used, so should be safe to remove from the unsupported list. Bug: 170729553 Test: Treehugger Merged-In: I8285daa8530260251ecad6f3f38f98e263629ca7 Change-Id: I626caf7c1fe46c5ab1f39c2895b42a34319f771a --- .../java/android/net/ConnectivityManager.java | 40 +++++++++---------- .../android/net/IConnectivityManager.aidl | 4 +- core/java/android/net/IpConfiguration.java | 3 +- core/java/android/net/LinkProperties.java | 6 +-- core/java/android/net/MacAddress.java | 3 +- core/java/android/net/Network.java | 3 +- .../java/android/net/NetworkCapabilities.java | 6 +-- core/java/android/net/NetworkRequest.java | 4 +- core/java/android/net/NetworkUtils.java | 6 +-- core/java/android/net/RouteInfo.java | 4 +- .../android/net/StaticIpConfiguration.java | 9 +++-- 11 files changed, 46 insertions(+), 42 deletions(-) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 8fd299504c..9b68d3f4f8 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -354,7 +354,7 @@ public class ConnectivityManager { * @hide */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final String ACTION_TETHER_STATE_CHANGED = TetheringManager.ACTION_TETHER_STATE_CHANGED; @@ -363,7 +363,7 @@ public class ConnectivityManager { * gives a String[] listing all the interfaces configured for * tethering and currently available for tethering. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final String EXTRA_AVAILABLE_TETHER = TetheringManager.EXTRA_AVAILABLE_TETHER; /** @@ -378,7 +378,7 @@ public class ConnectivityManager { * gives a String[] listing all the interfaces currently tethered * (ie, has DHCPv4 support and packets potentially forwarded/NATed) */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final String EXTRA_ACTIVE_TETHER = TetheringManager.EXTRA_ACTIVE_TETHER; /** @@ -387,7 +387,7 @@ public class ConnectivityManager { * failed. Use {@link #getLastTetherError} to find the error code * for any interfaces listed here. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final String EXTRA_ERRORED_TETHER = TetheringManager.EXTRA_ERRORED_TETHER; /** @@ -850,7 +850,7 @@ public class ConnectivityManager { * {@hide} */ @Deprecated - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static String getNetworkTypeName(int type) { switch (type) { case TYPE_NONE: @@ -1173,7 +1173,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.NETWORK_STACK) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public NetworkInfo getActiveNetworkInfoForUid(int uid) { return getActiveNetworkInfoForUid(uid, false); } @@ -1520,7 +1520,7 @@ public class ConnectivityManager { return 1; } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private NetworkCapabilities networkCapabilitiesForFeature(int networkType, String feature) { if (networkType == TYPE_MOBILE) { switch (feature) { @@ -1606,7 +1606,7 @@ public class ConnectivityManager { }; } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private static final HashMap sLegacyRequests = new HashMap<>(); @@ -1635,7 +1635,7 @@ public class ConnectivityManager { Log.d(TAG, "expireRequest with " + ourSeqNum + ", " + sequenceNum); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private NetworkRequest requestNetworkForFeatureLocked(NetworkCapabilities netCap) { int delay = -1; int type = legacyTypeForNetworkCapabilities(netCap); @@ -1665,7 +1665,7 @@ public class ConnectivityManager { } } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private boolean removeRequestForFeature(NetworkCapabilities netCap) { final LegacyRequest l; synchronized (sLegacyRequests) { @@ -1732,17 +1732,17 @@ public class ConnectivityManager { /** @hide */ public static class PacketKeepaliveCallback { - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public PacketKeepaliveCallback() { } /** The requested keepalive was successfully started. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void onStarted() {} /** The keepalive was successfully stopped. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void onStopped() {} /** An error occurred. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void onError(int error) {} } @@ -1806,7 +1806,7 @@ public class ConnectivityManager { private volatile Integer mSlot; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public void stop() { try { mExecutor.execute(() -> { @@ -1875,7 +1875,7 @@ public class ConnectivityManager { * * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public PacketKeepalive startNattKeepalive( Network network, int intervalSeconds, PacketKeepaliveCallback callback, InetAddress srcAddr, int srcPort, InetAddress dstAddr) { @@ -2110,7 +2110,7 @@ public class ConnectivityManager { /** {@hide} */ @Deprecated - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public NetworkQuotaInfo getActiveNetworkQuotaInfo() { try { return mService.getActiveNetworkQuotaInfo(); @@ -2408,7 +2408,7 @@ public class ConnectivityManager { * * {@hide} */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Deprecated public int tether(String iface) { return mTetheringManager.tether(iface); @@ -2849,7 +2849,7 @@ public class ConnectivityManager { * {@hide} */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Deprecated public int getLastTetherError(String iface) { int error = mTetheringManager.getLastTetherError(iface); @@ -4659,7 +4659,7 @@ public class ConnectivityManager { * @deprecated This is strictly for legacy usage to support {@link #startUsingNetworkFeature}. */ @Deprecated - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static boolean setProcessDefaultNetworkForHostResolution(Network network) { return NetworkUtils.bindProcessToNetworkForHostResolution( (network == null) ? NETID_UNSET : network.getNetIdForResolv()); diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 059ec28298..41732008b4 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -73,7 +73,7 @@ interface IConnectivityManager NetworkCapabilities getNetworkCapabilities(in Network network, String callingPackageName); - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) NetworkState[] getAllNetworkState(); NetworkQuotaInfo getActiveNetworkQuotaInfo(); @@ -134,7 +134,7 @@ interface IConnectivityManager VpnConfig getVpnConfig(int userId); - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) void startLegacyVpn(in VpnProfile profile); LegacyVpnInfo getLegacyVpnInfo(int userId); diff --git a/core/java/android/net/IpConfiguration.java b/core/java/android/net/IpConfiguration.java index 23d5ff7f3a..0b205642b3 100644 --- a/core/java/android/net/IpConfiguration.java +++ b/core/java/android/net/IpConfiguration.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -98,7 +99,7 @@ public final class IpConfiguration implements Parcelable { } /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public IpConfiguration(IpAssignment ipAssignment, ProxySettings proxySettings, StaticIpConfiguration staticIpConfiguration, diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index 616ccbe502..aa4b154547 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -111,7 +111,7 @@ public final class LinkProperties implements Parcelable { * * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static ProvisioningChange compareProvisioning( LinkProperties before, LinkProperties after) { if (before.isProvisioned() && after.isProvisioned()) { @@ -849,7 +849,7 @@ public final class LinkProperties implements Parcelable { * Returns all the links stacked on top of this link. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public @NonNull List getStackedLinks() { if (mStackedLinks.isEmpty()) { return Collections.emptyList(); @@ -1448,7 +1448,7 @@ public final class LinkProperties implements Parcelable { * @return {@code true} if both are identical, {@code false} otherwise. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public boolean isIdenticalStackedLinks(@NonNull LinkProperties target) { if (!mStackedLinks.keySet().equals(target.mStackedLinks.keySet())) { return false; diff --git a/core/java/android/net/MacAddress.java b/core/java/android/net/MacAddress.java index 0eb3c1e8ad..178183dbe0 100644 --- a/core/java/android/net/MacAddress.java +++ b/core/java/android/net/MacAddress.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.compat.annotation.UnsupportedAppUsage; import android.net.util.MacAddressUtils; import android.net.wifi.WifiInfo; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -58,7 +59,7 @@ public final class MacAddress implements Parcelable { *

Not publicly exposed or treated specially since the OUI 00:00:00 is registered. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static final MacAddress ALL_ZEROS_ADDRESS = new MacAddress(0); /** @hide */ diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java index 25619384ac..f98a1f8a22 100644 --- a/core/java/android/net/Network.java +++ b/core/java/android/net/Network.java @@ -19,6 +19,7 @@ package android.net; import android.annotation.NonNull; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.system.ErrnoException; @@ -109,7 +110,7 @@ public class Network implements Parcelable { /** * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public Network(int netId) { this(netId, false); } diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index 12ddc628f4..f806b565b1 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -133,7 +133,7 @@ public final class NetworkCapabilities implements Parcelable { * Represents the network's capabilities. If any are specified they will be satisfied * by any Network that matches all of them. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private long mNetworkCapabilities; /** @@ -1288,7 +1288,7 @@ public final class NetworkCapabilities implements Parcelable { * * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public boolean hasSignalStrength() { return mSignalStrength > SIGNAL_STRENGTH_UNSPECIFIED; } @@ -1927,7 +1927,7 @@ public final class NetworkCapabilities implements Parcelable { /** * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static @NonNull String transportNamesOf(@Nullable @Transport int[] types) { StringJoiner joiner = new StringJoiner("|"); if (types != null) { diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java index 473e6c5a72..dc16d74220 100644 --- a/core/java/android/net/NetworkRequest.java +++ b/core/java/android/net/NetworkRequest.java @@ -43,7 +43,7 @@ public class NetworkRequest implements Parcelable { * The {@link NetworkCapabilities} that define this request. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final @NonNull NetworkCapabilities networkCapabilities; /** @@ -52,7 +52,7 @@ public class NetworkRequest implements Parcelable { * the request. * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public final int requestId; /** diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index 1e5b6d5ab5..a0faafa779 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -98,7 +98,7 @@ public class NetworkUtils { * this socket will go directly to the underlying network, so its traffic will not be * forwarded through the VPN. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static boolean protectFromVpn(FileDescriptor fd) { return protectFromVpn(fd.getInt$()); } @@ -223,7 +223,7 @@ public class NetworkUtils { * @hide * @deprecated use {@link Inet4AddressUtils#netmaskToPrefixLength(Inet4Address)} */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Deprecated public static int netmaskToPrefixLength(Inet4Address netmask) { // This is only here because some apps seem to be using it (@UnsupportedAppUsage). @@ -290,7 +290,7 @@ public class NetworkUtils { /** * Returns the implicit netmask of an IPv4 address, as was the custom before 1993. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public static int getImplicitNetmask(Inet4Address address) { // Only here because it seems to be used by apps return Inet4AddressUtils.getImplicitNetmask(address); diff --git a/core/java/android/net/RouteInfo.java b/core/java/android/net/RouteInfo.java index 62aebb0180..6166a753d8 100644 --- a/core/java/android/net/RouteInfo.java +++ b/core/java/android/net/RouteInfo.java @@ -232,7 +232,7 @@ public final class RouteInfo implements Parcelable { * * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public RouteInfo(@Nullable IpPrefix destination, @Nullable InetAddress gateway, @Nullable String iface) { this(destination, gateway, iface, RTN_UNICAST); @@ -501,7 +501,7 @@ public final class RouteInfo implements Parcelable { * * @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Nullable public static RouteInfo selectBestRoute(Collection routes, InetAddress dest) { return NetUtils.selectBestRoute(routes, dest); diff --git a/core/java/android/net/StaticIpConfiguration.java b/core/java/android/net/StaticIpConfiguration.java index f56d656f07..ce545974f5 100644 --- a/core/java/android/net/StaticIpConfiguration.java +++ b/core/java/android/net/StaticIpConfiguration.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -53,19 +54,19 @@ import java.util.Objects; @SystemApi public final class StaticIpConfiguration implements Parcelable { /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Nullable public LinkAddress ipAddress; /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Nullable public InetAddress gateway; /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @NonNull public final ArrayList dnsServers; /** @hide */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) @Nullable public String domains; From 8744c5c999c12f53d7b543f17cfe1a89eefe66c5 Mon Sep 17 00:00:00 2001 From: Cody Kesting Date: Fri, 4 Dec 2020 19:22:05 +0000 Subject: [PATCH 2/3] Allow the System UID to unregister ConnDiags CBs. This CL updates ConnectivityService to allow the System's UID to unregister ConnectivityDiagnostics callbacks. Preivously, only the registrant was allowed to unregister them - this caused problems for callbacks that were attempted to be unregistered via binderDied() when the registrant app dies. Bug: 159912975 Bug: 174713659 Test: manually verified Change-Id: I20d0cad5f902708d366aa703c2893b0ea3e55052 Merged-In: I20d0cad5f902708d366aa703c2893b0ea3e55052 (cherry picked from commit 4787c9bc59556ffb62d3b9d6c894af017d985280) --- .../core/java/com/android/server/ConnectivityService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 03c31a6971..cf14c6377d 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -8042,8 +8042,10 @@ public class ConnectivityService extends IConnectivityManager.Stub final NetworkRequestInfo nri = cbInfo.mRequestInfo; - if (uid != nri.mUid) { - if (VDBG) loge("Different uid than registrant attempting to unregister cb"); + // Caller's UID must either be the registrants (if they are unregistering) or the System's + // (if the Binder died) + if (uid != nri.mUid && uid != Process.SYSTEM_UID) { + if (DBG) loge("Uid(" + uid + ") not registrant's (" + nri.mUid + ") or System's"); return; } From 6a9bff92aec1e03e17d6a4651cb33826cdce8047 Mon Sep 17 00:00:00 2001 From: Sarah Chin Date: Wed, 25 Nov 2020 12:15:14 -0800 Subject: [PATCH 3/3] Move phone ID to extra for action provision Previously, the phone ID was appended to the broadcast in DCT and sent to ConnectivityManager. Instead of sending both as an action, send the phone ID as an extra instead to make the action a protected broadcast. Test: manually verify a SecurityException when action provision is sent Test: atest DcTrackerTest Bug: 172459128 Change-Id: Ic4129def86949d7191d15056852718dadbd72fba Merged-In: Ic4129def86949d7191d15056852718dadbd72fba --- core/java/android/net/ConnectivityManager.java | 4 ++-- .../server/connectivity/NetworkNotificationManager.java | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index a29f878260..ed03f5198d 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -3115,9 +3115,9 @@ public class ConnectivityManager { } /** - * Set sign in error notification to visible or in visible + * Set sign in error notification to visible or invisible * - * {@hide} + * @hide * @deprecated Doesn't properly deal with multiple connected networks of the same type. */ @Deprecated diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java index 34b0aa2464..71ef0e2809 100644 --- a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java +++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java @@ -324,7 +324,13 @@ public class NetworkNotificationManager { */ public void setProvNotificationVisible(boolean visible, int id, String action) { if (visible) { - Intent intent = new Intent(action); + // For legacy purposes, action is sent as the action + the phone ID from DcTracker. + // Split the string here and send the phone ID as an extra instead. + String[] splitAction = action.split(":"); + Intent intent = new Intent(splitAction[0]); + try { + intent.putExtra("provision.phone.id", Integer.parseInt(splitAction[1])); + } catch (NumberFormatException ignored) { } PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); showNotification(id, NotificationType.SIGN_IN, null, null, pendingIntent, false); } else {