Merge "Require location permission for ConnDiags WiFi only." am: 5cfbc2e4cc am: 058e8f9f28

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1718590

Change-Id: I10a6a9c97cf7bfdde877a9d061b03990a830833c
This commit is contained in:
Treehugger Robot
2021-06-07 19:22:18 +00:00
committed by Automerger Merge Worker
2 changed files with 50 additions and 9 deletions

View File

@@ -78,6 +78,7 @@ import static android.net.NetworkCapabilities.REDACT_FOR_NETWORK_SETTINGS;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.net.NetworkRequest.Type.LISTEN_FOR_BEST;
import static android.net.shared.NetworkMonitorUtils.isPrivateDnsValidationRequired;
import static android.os.Process.INVALID_UID;
@@ -9194,6 +9195,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
return results;
}
private boolean isLocationPermissionRequiredForConnectivityDiagnostics(
@NonNull NetworkAgentInfo nai) {
// TODO(b/188483916): replace with a transport-agnostic location-aware check
return nai.networkCapabilities.hasTransport(TRANSPORT_WIFI);
}
private boolean hasLocationPermission(String packageName, int uid) {
// LocationPermissionChecker#checkLocationPermission can throw SecurityException if the uid
// and package name don't match. Throwing on the CS thread is not acceptable, so wrap the
@@ -9236,7 +9243,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
return false;
}
return hasLocationPermission(callbackPackageName, callbackUid);
return !isLocationPermissionRequiredForConnectivityDiagnostics(nai)
|| hasLocationPermission(callbackPackageName, callbackUid);
}
@Override