Guard isProviderPackage with permission
Add READ_DEVICE_CONFIG permission requirement for using
isProviderPackage(). Now with more correctness.
Bug: 126614252
Test: manual
Change-Id: I38108a971e0f1dadc8fca8373c80d5d38099f161
diff --git a/api/system-current.txt b/api/system-current.txt
index 3ff93f5..8bc435b 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3404,7 +3404,7 @@
method public boolean isExtraLocationControllerPackageEnabled();
method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
- method public boolean isProviderPackage(@NonNull String);
+ method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@NonNull String);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.app.PendingIntent);
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index 7a17505..55ed8c5 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -2314,6 +2314,7 @@
* @hide
*/
@SystemApi
+ @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
public boolean isProviderPackage(@NonNull String packageName) {
try {
return mService.isProviderPackage(packageName);
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index 44fc45e..e083de8 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -3049,6 +3049,8 @@
@Override
public boolean isProviderPackage(String packageName) {
+ mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_DEVICE_CONFIG,
+ Manifest.permission.READ_DEVICE_CONFIG + " permission required");
synchronized (mLock) {
for (LocationProvider provider : mProviders) {
if (provider.getPackagesLocked().contains(packageName)) {