Update permission check to use Statsd's uid
Test: atest com.google.android.statsd.gts.StatsdHostTestCases Bug: 145565463 Change-Id: I55bb3e50ef74e279d303118ba8c90f80cd39aefc
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user