Add a permissions check to LocationManagerService.

Prevents apps from reading location requests of other users without INTERACT_ACROSS_USERS permission.
Bug: 222473855
Test: Build

	modified:   services/core/java/com/android/server/location/LocationManagerService.java

Change-Id: Id591cd39ed7813c649b44d4a3210f0b1fb79b40d
This commit is contained in:
Brian Julian
2022-04-22 20:28:49 +00:00
parent cc8b4fda71
commit 16560c0930
3 changed files with 6 additions and 2 deletions

View File

@@ -5876,7 +5876,7 @@ package android.location {
}
public class LocationManager {
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void addProviderRequestChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.provider.ProviderRequest.ChangedListener);
method @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.INTERACT_ACROSS_USERS}) public void addProviderRequestChangedListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.provider.ProviderRequest.ChangedListener);
method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void flushGnssBatch();
method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void getCurrentLocation(@NonNull android.location.LocationRequest, @Nullable android.os.CancellationSignal, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<android.location.Location>);
method @Nullable public String getExtraLocationControllerPackage();

View File

@@ -2910,7 +2910,8 @@ public class LocationManager {
* @hide
*/
@SystemApi
@RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
@RequiresPermission(allOf = {Manifest.permission.LOCATION_HARDWARE,
Manifest.permission.INTERACT_ACROSS_USERS})
public void addProviderRequestChangedListener(
@NonNull @CallbackExecutor Executor executor,
@NonNull ChangedListener listener) {

View File

@@ -17,6 +17,7 @@
package com.android.server.location;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
import static android.app.compat.CompatChanges.isChangeEnabled;
import static android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE;
@@ -1029,7 +1030,9 @@ public class LocationManagerService extends ILocationManager.Stub implements
}
@Override
@RequiresPermission(INTERACT_ACROSS_USERS)
public void addProviderRequestListener(IProviderRequestListener listener) {
mContext.enforceCallingOrSelfPermission(INTERACT_ACROSS_USERS, null);
for (LocationProviderManager manager : mProviderManagers) {
manager.addProviderRequestListener(listener);
}