From f681646d82f0824932cf9606456e20df4b0e8736 Mon Sep 17 00:00:00 2001 From: Muhammad Qureshi Date: Wed, 13 May 2020 15:13:33 -0700 Subject: Add whitelisted atom ids to StatsdConfig Get whitelisted atom ids from StatsdConfig which can be logged from any uid. Fixes: 155521934 Test: statsd_test Change-Id: Ib2db310d1cd8479d4996e70ac09d40e8dc45af48 --- cmds/statsd/src/metrics/MetricsManager.cpp | 7 +++++++ cmds/statsd/src/metrics/MetricsManager.h | 2 ++ cmds/statsd/src/statsd_config.proto | 2 ++ cmds/statsd/tests/MetricsManager_test.cpp | 24 ++++++++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index d7ad27bd9134..e8c575a1adea 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -71,6 +71,8 @@ MetricsManager::MetricsManager(const ConfigKey& key, const StatsdConfig& config, mLastReportTimeNs(currentTimeNs), mLastReportWallClockNs(getWallClockNs()), mPullerManager(pullerManager), + mWhitelistedAtomIds(config.whitelisted_atom_ids().begin(), + config.whitelisted_atom_ids().end()), mShouldPersistHistory(config.persist_locally()) { // Init the ttl end timestamp. refreshTtl(timeBaseNs); @@ -366,11 +368,16 @@ void MetricsManager::onDumpReport(const int64_t dumpTimeStampNs, bool MetricsManager::checkLogCredentials(const LogEvent& event) { + // TODO(b/154856835): Remove this check once we get whitelist from the config. if (android::util::AtomsInfo::kWhitelistedAtoms.find(event.GetTagId()) != android::util::AtomsInfo::kWhitelistedAtoms.end()) { return true; } + + if (mWhitelistedAtomIds.find(event.GetTagId()) != mWhitelistedAtomIds.end()) { + return true; + } std::lock_guard lock(mAllowedLogSourcesMutex); if (mAllowedLogSources.find(event.GetUid()) == mAllowedLogSources.end()) { VLOG("log source %d not on the whitelist", event.GetUid()); diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h index ef03d2064ab0..c30532a39244 100644 --- a/cmds/statsd/src/metrics/MetricsManager.h +++ b/cmds/statsd/src/metrics/MetricsManager.h @@ -189,6 +189,8 @@ private: // To guard access to mAllowedLogSources mutable std::mutex mAllowedLogSourcesMutex; + const std::set mWhitelistedAtomIds; + // We can pull any atom from these uids. std::set mDefaultPullUids; diff --git a/cmds/statsd/src/statsd_config.proto b/cmds/statsd/src/statsd_config.proto index c7407bd9af1e..7c0057d87ca9 100644 --- a/cmds/statsd/src/statsd_config.proto +++ b/cmds/statsd/src/statsd_config.proto @@ -489,6 +489,8 @@ message StatsdConfig { repeated PullAtomPackages pull_atom_packages = 23; + repeated int32 whitelisted_atom_ids = 24; + // Field number 1000 is reserved for later use. reserved 1000; } diff --git a/cmds/statsd/tests/MetricsManager_test.cpp b/cmds/statsd/tests/MetricsManager_test.cpp index a44541dddf53..15be0d2be048 100644 --- a/cmds/statsd/tests/MetricsManager_test.cpp +++ b/cmds/statsd/tests/MetricsManager_test.cpp @@ -591,6 +591,30 @@ TEST(MetricsManagerTest, TestLogSources) { EXPECT_TRUE(isSubset(defaultPullUids, set(atom3Uids.begin(), atom3Uids.end()))); } +TEST(MetricsManagerTest, TestCheckLogCredentialsWhitelistedAtom) { + sp uidMap; + sp pullerManager = new StatsPullerManager(); + sp anomalyAlarmMonitor; + sp periodicAlarmMonitor; + + StatsdConfig config = buildGoodConfig(); + config.add_whitelisted_atom_ids(3); + config.add_whitelisted_atom_ids(4); + + MetricsManager metricsManager(kConfigKey, config, timeBaseSec, timeBaseSec, uidMap, + pullerManager, anomalyAlarmMonitor, periodicAlarmMonitor); + + LogEvent event(0 /* uid */, 0 /* pid */); + CreateNoValuesLogEvent(&event, 10 /* atom id */, 0 /* timestamp */); + EXPECT_FALSE(metricsManager.checkLogCredentials(event)); + + CreateNoValuesLogEvent(&event, 3 /* atom id */, 0 /* timestamp */); + EXPECT_TRUE(metricsManager.checkLogCredentials(event)); + + CreateNoValuesLogEvent(&event, 4 /* atom id */, 0 /* timestamp */); + EXPECT_TRUE(metricsManager.checkLogCredentials(event)); +} + } // namespace statsd } // namespace os } // namespace android -- cgit v1.2.3-59-g8ed1b