Do not blame network scorer apps for permission access.

A note-op should be used when data is delivered to an app. If no data is
delivered to the app, we should either use checkOp or
PermissionChecker.checkPermissionForPreflight (which uses checkOp
internally).

Test: None
Change-Id: I0742ddd6a689e356b23499ed16c3d7a6ccd5ced7
This commit is contained in:
Philip P. Moltmann
2019-10-03 12:22:52 -07:00
parent ff53253c9b
commit 04acad99bd

View File

@@ -18,10 +18,10 @@ package com.android.server;
import android.Manifest.permission;
import android.annotation.Nullable;
import android.app.AppOpsManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.PermissionChecker;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
@@ -210,14 +210,9 @@ public class NetworkScorerAppManager {
}
private boolean canAccessLocation(int uid, String packageName) {
final PackageManager pm = mContext.getPackageManager();
final AppOpsManager appOpsManager =
(AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
return isLocationModeEnabled()
&& pm.checkPermission(permission.ACCESS_COARSE_LOCATION, packageName)
== PackageManager.PERMISSION_GRANTED
&& appOpsManager.noteOp(AppOpsManager.OP_COARSE_LOCATION, uid, packageName)
== AppOpsManager.MODE_ALLOWED;
return isLocationModeEnabled() && PermissionChecker.checkPermissionForPreflight(mContext,
permission.ACCESS_COARSE_LOCATION, PermissionChecker.PID_UNKNOWN, uid, packageName)
== PermissionChecker.PERMISSION_GRANTED;
}
private boolean isLocationModeEnabled() {