summaryrefslogtreecommitdiff
path: root/cmds/statsd/src/metrics/MetricsManager.cpp
diff options
context:
space:
mode:
authorRuchir Rastogi <ruchirr@google.com>2020-04-20 11:51:14 -0700
committerRuchir Rastogi <ruchirr@google.com>2020-04-20 14:33:20 -0700
commitd4cc69301ed840e64fb5684cd623aafe44ce579a (patch)
tree28ab5662838ed241962f8ed7d8f950e906cb5632 /cmds/statsd/src/metrics/MetricsManager.cpp
parent74918ad98b005f4235fc8bb6fb296532e359589c (diff)
Fix AppBreadcrumbReported bug with isolated uid
In MetricsManager::onLogEvent, we check whether the uid in AppBreadcrumbReported is the same as the logger's uid. However, because we map uids within LogEvents from isolated uids to host uids prior to this, we should convert the logger uid to the host uid as well. Test: m Bug: 154124933 Change-Id: I9dba4327dd8f1102c651ca84b5ef7b48be9cf84d
Diffstat (limited to 'cmds/statsd/src/metrics/MetricsManager.cpp')
-rw-r--r--cmds/statsd/src/metrics/MetricsManager.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp
index d832ed86580d..59d4891f76ab 100644
--- a/cmds/statsd/src/metrics/MetricsManager.cpp
+++ b/cmds/statsd/src/metrics/MetricsManager.cpp
@@ -380,11 +380,14 @@ bool MetricsManager::eventSanityCheck(const LogEvent& event) {
// Uid is 3rd from last field and must match the caller's uid,
// unless that caller is statsd itself (statsd is allowed to spoof uids).
long appHookUid = event.GetLong(event.size()-2, &err);
- if (err != NO_ERROR ) {
+ if (err != NO_ERROR) {
VLOG("APP_BREADCRUMB_REPORTED had error when parsing the uid");
return false;
}
- int32_t loggerUid = event.GetUid();
+
+ // Because the uid within the LogEvent may have been mapped from
+ // isolated to host, map the loggerUid similarly before comparing.
+ int32_t loggerUid = mUidMap->getHostUidOrSelf(event.GetUid());
if (loggerUid != appHookUid && loggerUid != AID_STATSD) {
VLOG("APP_BREADCRUMB_REPORTED has invalid uid: claimed %ld but caller is %d",
appHookUid, loggerUid);
@@ -393,7 +396,7 @@ bool MetricsManager::eventSanityCheck(const LogEvent& event) {
// The state must be from 0,3. This part of code must be manually updated.
long appHookState = event.GetLong(event.size(), &err);
- if (err != NO_ERROR ) {
+ if (err != NO_ERROR) {
VLOG("APP_BREADCRUMB_REPORTED had error when parsing the state field");
return false;
} else if (appHookState < 0 || appHookState > 3) {
@@ -407,7 +410,7 @@ bool MetricsManager::eventSanityCheck(const LogEvent& event) {
// Uid is the first field provided.
long jankUid = event.GetLong(1, &err);
- if (err != NO_ERROR ) {
+ if (err != NO_ERROR) {
VLOG("Davey occurred had error when parsing the uid");
return false;
}
@@ -419,7 +422,7 @@ bool MetricsManager::eventSanityCheck(const LogEvent& event) {
}
long duration = event.GetLong(event.size(), &err);
- if (err != NO_ERROR ) {
+ if (err != NO_ERROR) {
VLOG("Davey occurred had error when parsing the duration");
return false;
} else if (duration > 100000) {