Migrate DangerousPermissionState(Sampled)
Test: atest UidAtomTests#testDangerousPermissionState Test: atest UidAtomTests#testDangerousPermissionStateSampled Test: adb shell cmd stats pull-source 10050 Test: adb shell cmd stats pull-source 10067 Change-Id: Ia740d185cc510a73e8c4f07ef8ce8d50e99779c2
This commit is contained in:
@@ -907,83 +907,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
pulledData.add(e);
|
||||
}
|
||||
|
||||
private void pullDangerousPermissionState(int atomId, long elapsedNanos,
|
||||
final long wallClockNanos, List<StatsLogEventWrapper> pulledData) {
|
||||
long token = Binder.clearCallingIdentity();
|
||||
Set<Integer> reportedUids = new HashSet<>();
|
||||
try {
|
||||
PackageManager pm = mContext.getPackageManager();
|
||||
|
||||
List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
|
||||
|
||||
int numUsers = users.size();
|
||||
for (int userNum = 0; userNum < numUsers; userNum++) {
|
||||
UserHandle user = users.get(userNum).getUserHandle();
|
||||
|
||||
List<PackageInfo> pkgs = pm.getInstalledPackagesAsUser(
|
||||
PackageManager.GET_PERMISSIONS, user.getIdentifier());
|
||||
|
||||
int numPkgs = pkgs.size();
|
||||
for (int pkgNum = 0; pkgNum < numPkgs; pkgNum++) {
|
||||
PackageInfo pkg = pkgs.get(pkgNum);
|
||||
|
||||
if (pkg.requestedPermissions == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (reportedUids.contains(pkg.applicationInfo.uid)) {
|
||||
// do not report same uid twice
|
||||
continue;
|
||||
}
|
||||
reportedUids.add(pkg.applicationInfo.uid);
|
||||
|
||||
if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED
|
||||
&& ThreadLocalRandom.current().nextFloat() > 0.2f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int numPerms = pkg.requestedPermissions.length;
|
||||
for (int permNum = 0; permNum < numPerms; permNum++) {
|
||||
String permName = pkg.requestedPermissions[permNum];
|
||||
|
||||
PermissionInfo permissionInfo;
|
||||
int permissionFlags = 0;
|
||||
try {
|
||||
permissionInfo = pm.getPermissionInfo(permName, 0);
|
||||
permissionFlags =
|
||||
pm.getPermissionFlags(permName, pkg.packageName, user);
|
||||
|
||||
} catch (PackageManager.NameNotFoundException ignored) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (permissionInfo.getProtection() != PROTECTION_DANGEROUS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
StatsLogEventWrapper e = new StatsLogEventWrapper(
|
||||
atomId, elapsedNanos, wallClockNanos);
|
||||
|
||||
e.writeString(permName);
|
||||
e.writeInt(pkg.applicationInfo.uid);
|
||||
if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE) {
|
||||
e.writeString(null);
|
||||
}
|
||||
e.writeBoolean((pkg.requestedPermissionsFlags[permNum]
|
||||
& REQUESTED_PERMISSION_GRANTED) != 0);
|
||||
e.writeInt(permissionFlags);
|
||||
|
||||
pulledData.add(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
Log.e(TAG, "Could not read permissions", t);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
}
|
||||
|
||||
private void pullAppOps(long elapsedNanos, final long wallClockNanos,
|
||||
List<StatsLogEventWrapper> pulledData) {
|
||||
long token = Binder.clearCallingIdentity();
|
||||
@@ -1276,18 +1199,6 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.DANGEROUS_PERMISSION_STATE: {
|
||||
pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE, elapsedNanos,
|
||||
wallClockNanos, ret);
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED: {
|
||||
pullDangerousPermissionState(StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED,
|
||||
elapsedNanos, wallClockNanos, ret);
|
||||
break;
|
||||
}
|
||||
|
||||
case StatsLog.TIME_ZONE_DATA_INFO: {
|
||||
pullTimeZoneDataInfo(tagId, elapsedNanos, wallClockNanos, ret);
|
||||
break;
|
||||
|
||||
@@ -128,10 +128,6 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
|
||||
{{.atomTag = android::util::ROLE_HOLDER},
|
||||
{.puller = new StatsCompanionServicePuller(android::util::ROLE_HOLDER)}},
|
||||
|
||||
// PermissionState.
|
||||
{{.atomTag = android::util::DANGEROUS_PERMISSION_STATE},
|
||||
{.puller = new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE)}},
|
||||
|
||||
// TrainInfo.
|
||||
{{.atomTag = android::util::TRAIN_INFO}, {.puller = new TrainInfoPuller()}},
|
||||
|
||||
@@ -167,11 +163,6 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
|
||||
{{.atomTag = android::util::VMS_CLIENT_STATS},
|
||||
{.additiveFields = {5, 6, 7, 8, 9, 10},
|
||||
.puller = new CarStatsPuller(android::util::VMS_CLIENT_STATS)}},
|
||||
|
||||
// PermissionStateSampled.
|
||||
{{.atomTag = android::util::DANGEROUS_PERMISSION_STATE_SAMPLED},
|
||||
{.puller =
|
||||
new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE_SAMPLED)}},
|
||||
};
|
||||
|
||||
StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) {
|
||||
|
||||
@@ -301,7 +301,6 @@ public class StatsPullAtomService extends SystemService {
|
||||
registerDebugFailingElapsedClock();
|
||||
registerBuildInformation();
|
||||
registerRoleHolder();
|
||||
registerDangerousPermissionState();
|
||||
registerTimeZoneDataInfo();
|
||||
registerExternalStorageInfo();
|
||||
registerAppsOnExternalStorageInfo();
|
||||
@@ -2145,11 +2144,89 @@ public class StatsPullAtomService extends SystemService {
|
||||
}
|
||||
|
||||
private void registerDangerousPermissionState() {
|
||||
// No op.
|
||||
int tagId = StatsLog.DANGEROUS_PERMISSION_STATE;
|
||||
mStatsManager.registerPullAtomCallback(
|
||||
tagId,
|
||||
null, // use default PullAtomMetadata values
|
||||
(atomTag, data) -> pullDangerousPermissionState(atomTag, data),
|
||||
BackgroundThread.getExecutor()
|
||||
);
|
||||
}
|
||||
|
||||
private void pullDangerousPermissionState() {
|
||||
// No op.
|
||||
private int pullDangerousPermissionState(int atomTag, List<StatsEvent> pulledData) {
|
||||
final long token = Binder.clearCallingIdentity();
|
||||
Set<Integer> reportedUids = new HashSet<>();
|
||||
try {
|
||||
PackageManager pm = mContext.getPackageManager();
|
||||
|
||||
List<UserInfo> users = mContext.getSystemService(UserManager.class).getUsers();
|
||||
|
||||
int numUsers = users.size();
|
||||
for (int userNum = 0; userNum < numUsers; userNum++) {
|
||||
UserHandle user = users.get(userNum).getUserHandle();
|
||||
|
||||
List<PackageInfo> pkgs = pm.getInstalledPackagesAsUser(
|
||||
PackageManager.GET_PERMISSIONS, user.getIdentifier());
|
||||
|
||||
int numPkgs = pkgs.size();
|
||||
for (int pkgNum = 0; pkgNum < numPkgs; pkgNum++) {
|
||||
PackageInfo pkg = pkgs.get(pkgNum);
|
||||
|
||||
if (pkg.requestedPermissions == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (reportedUids.contains(pkg.applicationInfo.uid)) {
|
||||
// do not report same uid twice
|
||||
continue;
|
||||
}
|
||||
reportedUids.add(pkg.applicationInfo.uid);
|
||||
|
||||
if (atomTag == StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED
|
||||
&& ThreadLocalRandom.current().nextFloat() > 0.2f) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int numPerms = pkg.requestedPermissions.length;
|
||||
for (int permNum = 0; permNum < numPerms; permNum++) {
|
||||
String permName = pkg.requestedPermissions[permNum];
|
||||
|
||||
PermissionInfo permissionInfo;
|
||||
int permissionFlags = 0;
|
||||
try {
|
||||
permissionInfo = pm.getPermissionInfo(permName, 0);
|
||||
permissionFlags =
|
||||
pm.getPermissionFlags(permName, pkg.packageName, user);
|
||||
} catch (PackageManager.NameNotFoundException ignored) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (permissionInfo.getProtection() != PROTECTION_DANGEROUS) {
|
||||
continue;
|
||||
}
|
||||
|
||||
StatsEvent.Builder e = StatsEvent.newBuilder();
|
||||
e.setAtomId(atomTag);
|
||||
e.writeString(permName);
|
||||
e.writeInt(pkg.applicationInfo.uid);
|
||||
if (atomTag == StatsLog.DANGEROUS_PERMISSION_STATE) {
|
||||
e.writeString("");
|
||||
}
|
||||
e.writeBoolean((pkg.requestedPermissionsFlags[permNum]
|
||||
& REQUESTED_PERMISSION_GRANTED) != 0);
|
||||
e.writeInt(permissionFlags);
|
||||
|
||||
pulledData.add(e.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
Log.e(TAG, "Could not read permissions", t);
|
||||
return StatsManager.PULL_SKIP;
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(token);
|
||||
}
|
||||
return StatsManager.PULL_SUCCESS;
|
||||
}
|
||||
|
||||
private void registerTimeZoneDataInfo() {
|
||||
@@ -2277,10 +2354,12 @@ public class StatsPullAtomService extends SystemService {
|
||||
}
|
||||
|
||||
private void registerDangerousPermissionStateSampled() {
|
||||
// No op.
|
||||
}
|
||||
|
||||
private void pullDangerousPermissionStateSampled() {
|
||||
// No op.
|
||||
int tagId = StatsLog.DANGEROUS_PERMISSION_STATE_SAMPLED;
|
||||
mStatsManager.registerPullAtomCallback(
|
||||
tagId,
|
||||
null, // use default PullAtomMetadata values
|
||||
(atomTag, data) -> pullDangerousPermissionState(atomTag, data),
|
||||
BackgroundThread.getExecutor()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user