summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java26
-rw-r--r--cmds/statsd/src/atoms.proto25
-rw-r--r--cmds/statsd/src/external/StatsPullerManager.cpp4
3 files changed, 47 insertions, 8 deletions
diff --git a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
index 157da636397e..7c25c6c9f029 100644
--- a/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
+++ b/apex/statsd/service/java/com/android/server/stats/StatsCompanionService.java
@@ -172,6 +172,7 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -2136,8 +2137,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
pulledData.add(e);
}
- private void pullDangerousPermissionState(long elapsedNanos, final long wallClockNanos,
- List<StatsLogEventWrapper> pulledData) {
+ private void pullDangerousPermissionState(int atomId, long elapsedNanos,
+ final long wallClockNanos, List<StatsLogEventWrapper> pulledData) {
long token = Binder.clearCallingIdentity();
Set<Integer> reportedUids = new HashSet<>();
try {
@@ -2166,6 +2167,11 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
}
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];
@@ -2175,7 +2181,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
try {
permissionInfo = pm.getPermissionInfo(permName, 0);
permissionFlags =
- pm.getPermissionFlags(permName, pkg.packageName, user);
+ pm.getPermissionFlags(permName, pkg.packageName, user);
} catch (PackageManager.NameNotFoundException ignored) {
continue;
@@ -2186,11 +2192,13 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
}
StatsLogEventWrapper e = new StatsLogEventWrapper(
- StatsLog.DANGEROUS_PERMISSION_STATE, elapsedNanos, wallClockNanos);
+ atomId, elapsedNanos, wallClockNanos);
e.writeString(permName);
e.writeInt(pkg.applicationInfo.uid);
- e.writeString(null);
+ if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE) {
+ e.writeString(null);
+ }
e.writeBoolean((pkg.requestedPermissionsFlags[permNum]
& REQUESTED_PERMISSION_GRANTED) != 0);
e.writeInt(permissionFlags);
@@ -2640,7 +2648,13 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {
break;
}
case StatsLog.DANGEROUS_PERMISSION_STATE: {
- pullDangerousPermissionState(elapsedNanos, wallClockNanos, ret);
+ 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: {
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index a20436d4bdda..a2cfff2ff02e 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -356,7 +356,7 @@ message Atom {
}
// Pulled events will start at field 10000.
- // Next: 10067
+ // Next: 10068
oneof pulled {
WifiBytesTransfer wifi_bytes_transfer = 10000;
WifiBytesTransferByFgBg wifi_bytes_transfer_by_fg_bg = 10001;
@@ -424,6 +424,7 @@ message Atom {
ProcessMemorySnapshot process_memory_snapshot = 10064;
VmsClientStats vms_client_stats = 10065;
NotificationRemoteViews notification_remote_views = 10066;
+ DangerousPermissionStateSampled dangerous_permission_state_sampled = 10067;
}
// DO NOT USE field numbers above 100,000 in AOSP.
@@ -6490,7 +6491,8 @@ message MediametricsDrmManagerReported {
/**
* State of a dangerous permission requested by a package
- */
+ * Pulled from: StatsCompanionService
+*/
message DangerousPermissionState {
// Name of the permission
optional string permission_name = 1;
@@ -7541,3 +7543,22 @@ message VmsClientStats {
optional int64 dropped_bytes = 9;
optional int64 dropped_packets = 10;
}
+
+/**
+ * State of a dangerous permission requested by a package - sampled
+ * Pulled from: StatsCompanionService.java with data obtained from PackageManager API
+*/
+message DangerousPermissionStateSampled {
+ // Name of the permission
+ optional string permission_name = 1;
+
+ // Uid of the package
+ optional int32 uid = 2 [(is_uid) = true];
+
+ // If the permission is granted to the uid
+ optional bool is_granted = 3;
+
+ // Permission flags as per android.content.pm.PermissionFlags
+ optional int32 permission_flags = 4;
+}
+
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index 9ee627efa841..f913118385a3 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -284,6 +284,10 @@ std::map<PullerKey, PullAtomInfo> StatsPullerManager::kAllPullAtomInfo = {
// NotiifcationRemoteViews.
{{.atomTag = android::util::NOTIFICATION_REMOTE_VIEWS},
{.puller = new StatsCompanionServicePuller(android::util::NOTIFICATION_REMOTE_VIEWS)}},
+ // PermissionStateSampled.
+ {{.atomTag = android::util::DANGEROUS_PERMISSION_STATE_SAMPLED},
+ {.puller =
+ new StatsCompanionServicePuller(android::util::DANGEROUS_PERMISSION_STATE_SAMPLED)}},
};
StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) {