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

Commit e2e1335f authored by Jeffrey Huang's avatar Jeffrey Huang
Browse files

Update permission check to use Statsd's uid

Test: atest com.google.android.statsd.gts.StatsdHostTestCases
Bug: 145565463
Change-Id: I55bb3e50ef74e279d303118ba8c90f80cd39aefc
parent a39b118f
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -38,11 +38,15 @@ public class StatsCompanion {
    private static final String TAG = "StatsCompanion";
    private static final boolean DEBUG = false;

    static void enforceStatsCompanionPermission(Context context) {
    private static final int AID_STATSD = 1066;

    static void enforceStatsdCallingUid() {
        if (Binder.getCallingPid() == Process.myPid()) {
            return;
        }
        context.enforceCallingPermission(android.Manifest.permission.STATSCOMPANION, null);
        if (Binder.getCallingUid() != AID_STATSD) {
            throw new SecurityException("Not allowed to access StatsCompanion");
        }
    }

    /**
@@ -114,7 +118,7 @@ public class StatsCompanion {

        @Override
        public void sendDataBroadcast(long lastReportTimeNs) {
            enforceStatsCompanionPermission(mContext);
            enforceStatsdCallingUid();
            Intent intent = new Intent();
            intent.putExtra(EXTRA_LAST_REPORT_TIME, lastReportTimeNs);
            try {
@@ -126,7 +130,7 @@ public class StatsCompanion {

        @Override
        public void sendActiveConfigsChangedBroadcast(long[] configIds) {
            enforceStatsCompanionPermission(mContext);
            enforceStatsdCallingUid();
            Intent intent = new Intent();
            intent.putExtra(StatsManager.EXTRA_STATS_ACTIVE_CONFIG_KEYS, configIds);
            try {
@@ -142,7 +146,7 @@ public class StatsCompanion {
        @Override
        public void sendSubscriberBroadcast(long configUid, long configId, long subscriptionId,
                long subscriptionRuleId, String[] cookies, StatsDimensionsValue dimensionsValue) {
            enforceStatsCompanionPermission(mContext);
            enforceStatsdCallingUid();
            Intent intent =
                    new Intent()
                            .putExtra(StatsManager.EXTRA_STATS_CONFIG_UID, configUid)
+9 −9
Original line number Diff line number Diff line
@@ -398,7 +398,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void setAnomalyAlarm(long timestampMs) {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) Slog.d(TAG, "Setting anomaly alarm for " + timestampMs);
        final long callingToken = Binder.clearCallingIdentity();
        try {
@@ -414,7 +414,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void cancelAnomalyAlarm() {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) Slog.d(TAG, "Cancelling anomaly alarm");
        final long callingToken = Binder.clearCallingIdentity();
        try {
@@ -426,7 +426,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void setAlarmForSubscriberTriggering(long timestampMs) {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) {
            Slog.d(TAG,
                    "Setting periodic alarm in about " + (timestampMs
@@ -445,7 +445,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void cancelAlarmForSubscriberTriggering() {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) {
            Slog.d(TAG, "Cancelling periodic alarm");
        }
@@ -459,7 +459,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void setPullingAlarm(long nextPullTimeMs) {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) {
            Slog.d(TAG, "Setting pulling alarm in about "
                    + (nextPullTimeMs - SystemClock.elapsedRealtime()));
@@ -477,7 +477,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void cancelPullingAlarm() {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) {
            Slog.d(TAG, "Cancelling pulling alarm");
        }
@@ -491,7 +491,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public void statsdReady() {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        if (DEBUG) {
            Slog.d(TAG, "learned that statsdReady");
        }
@@ -503,7 +503,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override
    public void triggerUidSnapshot() {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        synchronized (sStatsdLock) {
            final long token = Binder.clearCallingIdentity();
            try {
@@ -518,7 +518,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub {

    @Override // Binder call
    public boolean checkPermission(String permission, int pid, int uid) {
        StatsCompanion.enforceStatsCompanionPermission(mContext);
        StatsCompanion.enforceStatsdCallingUid();
        return mContext.checkPermission(permission, pid, uid) == PackageManager.PERMISSION_GRANTED;
    }