diff options
author | Ruchir Rastogi <ruchirr@google.com> | 2020-04-20 11:51:14 -0700 |
---|---|---|
committer | Ruchir Rastogi <ruchirr@google.com> | 2020-04-20 14:33:20 -0700 |
commit | d4cc69301ed840e64fb5684cd623aafe44ce579a (patch) | |
tree | 28ab5662838ed241962f8ed7d8f950e906cb5632 /cmds/statsd/src/metrics/MetricsManager.cpp | |
parent | 74918ad98b005f4235fc8bb6fb296532e359589c (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.cpp | 13 |
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) { |