From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dmitry Muhomor Date: Tue, 14 Dec 2021 18:17:11 +0200 Subject: [PATCH] skip reportNetworkConnectivity() when permission is revoked --- core/java/android/net/ConnectivityManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 962c4215f7b6..089f6b65a908 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -17,6 +17,7 @@ package android.net; import static android.net.IpSecManager.INVALID_RESOURCE_ID; +import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; @@ -31,6 +32,7 @@ import android.annotation.UnsupportedAppUsage; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; import android.net.IpSecManager.UdpEncapsulationSocket; import android.net.SocketKeepalive.Callback; import android.os.Binder; @@ -3054,6 +3056,12 @@ public class ConnectivityManager { */ public void reportNetworkConnectivity(@Nullable Network network, boolean hasConnectivity) { printStackTrace(); + if (mContext.checkSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) { + // ConnectivityService enforces this by throwing an unexpected SecurityException, + // which puts GMS into a crash loop. Also useful for other apps that don't expect that + // INTERNET permission might get revoked. + return; + } try { mService.reportNetworkConnectivity(network, hasConnectivity); } catch (RemoteException e) {