Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccb82e44 authored by Stanislav Zholnin's avatar Stanislav Zholnin
Browse files

Add DangerousPermissionStateSampled atom and puller.

Bug: 145915618

Test: make statsd_testdrive && ./out/host/linux-x86/bin/statsd_testdrive 10067
Change-Id: I4783fd9782ef6a6d5148d1c9b2b263e5670d8dfb
parent 62fc781f
Loading
Loading
Loading
Loading
+20 −6
Original line number Diff line number Diff line
@@ -173,6 +173,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;

@@ -2135,8 +2136,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 {
@@ -2165,6 +2166,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];
@@ -2185,11 +2191,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);
                        if (atomId == StatsLog.DANGEROUS_PERMISSION_STATE) {
                            e.writeString(null);
                        }
                        e.writeBoolean((pkg.requestedPermissionsFlags[permNum]
                                & REQUESTED_PERMISSION_GRANTED) != 0);
                        e.writeInt(permissionFlags);
@@ -2639,7 +2647,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: {
+23 −2
Original line number Diff line number Diff line
@@ -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,6 +6491,7 @@ message MediametricsDrmManagerReported {

/**
 * State of a dangerous permission requested by a package
 * Pulled from: StatsCompanionService
*/
message DangerousPermissionState {
    // Name of the permission
@@ -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;
}
+4 −0
Original line number Diff line number Diff line
@@ -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) {