Loading cmds/incidentd/Android.bp +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,13 @@ cc_binary { "libplatformprotos", ], product_variables: { debuggable: { cflags: ["-DALLOW_RESTRICTED_SECTIONS=1"], }, }, init_rc: ["incidentd.rc"], } Loading cmds/incidentd/src/Reporter.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include "section_list.h" #include <android-base/file.h> #include <android-base/properties.h> #include <android/os/DropBoxManager.h> #include <android/util/protobuf.h> #include <android/util/ProtoOutputStream.h> Loading Loading @@ -467,8 +466,6 @@ void Reporter::runReport(size_t* reportByteSize) { IncidentMetadata metadata; int persistedPrivacyPolicy = PRIVACY_POLICY_UNSET; std::string buildType = android::base::GetProperty("ro.build.type", ""); const bool isUserdebugOrEng = buildType == "userdebug" || buildType == "eng"; (*reportByteSize) = 0; Loading Loading @@ -567,13 +564,6 @@ void Reporter::runReport(size_t* reportByteSize) { for (const Section** section = SECTION_LIST; *section; section++) { const int sectionId = (*section)->id; // If this section is too private for user builds, skip it. if ((*section)->userdebugAndEngOnly && !isUserdebugOrEng) { VLOG("Skipping incident report section %d '%s' because it's limited to userdebug/eng", sectionId, (*section)->name.string()); continue; } // If nobody wants this section, skip it. if (!mBatch->containsSection(sectionId)) { continue; Loading cmds/incidentd/src/Section.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <set> #include <android-base/file.h> #include <android-base/properties.h> #include <android-base/stringprintf.h> #include <android/util/protobuf.h> #include <android/util/ProtoOutputStream.h> Loading Loading @@ -63,10 +64,10 @@ static pid_t fork_execute_incident_helper(const int id, Fpipe* p2cPipe, Fpipe* c } // ================================================================================ Section::Section(int i, int64_t timeoutMs, bool userdebugAndEngOnly) Section::Section(int i, int64_t timeoutMs) : id(i), timeoutMs(timeoutMs), userdebugAndEngOnly(userdebugAndEngOnly) {} timeoutMs(timeoutMs) { } Section::~Section() {} Loading @@ -74,7 +75,7 @@ Section::~Section() {} static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sys/", 5) == 0; } FileSection::FileSection(int id, const char* filename, const int64_t timeoutMs) : Section(id, timeoutMs, false), mFilename(filename) { : Section(id, timeoutMs), mFilename(filename) { name = "file "; name += filename; mIsSysfs = isSysfs(filename); Loading Loading @@ -236,8 +237,8 @@ WorkerThreadData::WorkerThreadData(const WorkerThreadSection* sec) WorkerThreadData::~WorkerThreadData() {} // ================================================================================ WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs, bool userdebugAndEngOnly) : Section(id, timeoutMs, userdebugAndEngOnly) {} WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs) : Section(id, timeoutMs) {} WorkerThreadSection::~WorkerThreadSection() {} Loading Loading @@ -425,8 +426,8 @@ status_t CommandSection::Execute(ReportWriter* writer) const { } // ================================================================================ DumpsysSection::DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...) : WorkerThreadSection(id, REMOTE_CALL_TIMEOUT_MS, userdebugAndEngOnly), mService(service) { DumpsysSection::DumpsysSection(int id, const char* service, ...) : WorkerThreadSection(id, REMOTE_CALL_TIMEOUT_MS), mService(service) { name = "dumpsys "; name += service; Loading cmds/incidentd/src/Section.h +18 −5 Original line number Diff line number Diff line Loading @@ -40,10 +40,9 @@ class Section { public: const int id; const int64_t timeoutMs; // each section must have a timeout const bool userdebugAndEngOnly; String8 name; Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool userdebugAndEngOnly = false); Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~Section(); virtual status_t Execute(ReportWriter* writer) const = 0; Loading Loading @@ -85,8 +84,7 @@ private: */ class WorkerThreadSection : public Section { public: WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool userdebugAndEngOnly = false); WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~WorkerThreadSection(); virtual status_t Execute(ReportWriter* writer) const; Loading Loading @@ -116,7 +114,7 @@ private: */ class DumpsysSection : public WorkerThreadSection { public: DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...); DumpsysSection(int id, const char* service, ...); virtual ~DumpsysSection(); virtual status_t BlockingCall(int pipeWriteFd) const; Loading @@ -126,6 +124,21 @@ private: Vector<String16> mArgs; }; /** * Section that calls dumpsys on a system service. */ class SystemPropertyDumpsysSection : public WorkerThreadSection { public: SystemPropertyDumpsysSection(int id, const char* service, ...); virtual ~SystemPropertyDumpsysSection(); virtual status_t BlockingCall(int pipeWriteFd) const; private: String16 mService; Vector<String16> mArgs; }; /** * Section that reads from logd. */ Loading tools/incident_section_gen/main.cpp +13 −4 Original line number Diff line number Diff line Loading @@ -408,10 +408,16 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { for (int i=0; i<descriptor->field_count(); i++) { const FieldDescriptor* field = descriptor->field(i); if (field->type() != FieldDescriptor::TYPE_MESSAGE && field->type() != FieldDescriptor::TYPE_STRING) { if (field->type() != FieldDescriptor::TYPE_MESSAGE && field->type() != FieldDescriptor::TYPE_STRING) { continue; } const SectionFlags s = getSectionFlags(field); if (s.userdebug_and_eng_only()) { printf("#if ALLOW_RESTRICTED_SECTIONS\n"); } switch (s.type()) { case SECTION_NONE: continue; Loading @@ -424,8 +430,7 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { printf(" NULL),\n"); break; case SECTION_DUMPSYS: printf(" new DumpsysSection(%d, %s,", field->number(), s.userdebug_and_eng_only() ? "true" : "false"); printf(" new DumpsysSection(%d, ", field->number()); splitAndPrint(s.args()); printf(" NULL),\n"); break; Loading @@ -438,9 +443,13 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { printf(" NULL),\n"); break; case SECTION_TOMBSTONE: printf(" new TombstoneSection(%d, \"%s\"),\n", field->number(), s.args().c_str()); printf(" new TombstoneSection(%d, \"%s\"),\n", field->number(), s.args().c_str()); break; } if (s.userdebug_and_eng_only()) { printf("#endif\n"); } } printf(" NULL };\n"); Loading Loading
cmds/incidentd/Android.bp +7 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,13 @@ cc_binary { "libplatformprotos", ], product_variables: { debuggable: { cflags: ["-DALLOW_RESTRICTED_SECTIONS=1"], }, }, init_rc: ["incidentd.rc"], } Loading
cmds/incidentd/src/Reporter.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ #include "section_list.h" #include <android-base/file.h> #include <android-base/properties.h> #include <android/os/DropBoxManager.h> #include <android/util/protobuf.h> #include <android/util/ProtoOutputStream.h> Loading Loading @@ -467,8 +466,6 @@ void Reporter::runReport(size_t* reportByteSize) { IncidentMetadata metadata; int persistedPrivacyPolicy = PRIVACY_POLICY_UNSET; std::string buildType = android::base::GetProperty("ro.build.type", ""); const bool isUserdebugOrEng = buildType == "userdebug" || buildType == "eng"; (*reportByteSize) = 0; Loading Loading @@ -567,13 +564,6 @@ void Reporter::runReport(size_t* reportByteSize) { for (const Section** section = SECTION_LIST; *section; section++) { const int sectionId = (*section)->id; // If this section is too private for user builds, skip it. if ((*section)->userdebugAndEngOnly && !isUserdebugOrEng) { VLOG("Skipping incident report section %d '%s' because it's limited to userdebug/eng", sectionId, (*section)->name.string()); continue; } // If nobody wants this section, skip it. if (!mBatch->containsSection(sectionId)) { continue; Loading
cmds/incidentd/src/Section.cpp +9 −8 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include <set> #include <android-base/file.h> #include <android-base/properties.h> #include <android-base/stringprintf.h> #include <android/util/protobuf.h> #include <android/util/ProtoOutputStream.h> Loading Loading @@ -63,10 +64,10 @@ static pid_t fork_execute_incident_helper(const int id, Fpipe* p2cPipe, Fpipe* c } // ================================================================================ Section::Section(int i, int64_t timeoutMs, bool userdebugAndEngOnly) Section::Section(int i, int64_t timeoutMs) : id(i), timeoutMs(timeoutMs), userdebugAndEngOnly(userdebugAndEngOnly) {} timeoutMs(timeoutMs) { } Section::~Section() {} Loading @@ -74,7 +75,7 @@ Section::~Section() {} static inline bool isSysfs(const char* filename) { return strncmp(filename, "/sys/", 5) == 0; } FileSection::FileSection(int id, const char* filename, const int64_t timeoutMs) : Section(id, timeoutMs, false), mFilename(filename) { : Section(id, timeoutMs), mFilename(filename) { name = "file "; name += filename; mIsSysfs = isSysfs(filename); Loading Loading @@ -236,8 +237,8 @@ WorkerThreadData::WorkerThreadData(const WorkerThreadSection* sec) WorkerThreadData::~WorkerThreadData() {} // ================================================================================ WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs, bool userdebugAndEngOnly) : Section(id, timeoutMs, userdebugAndEngOnly) {} WorkerThreadSection::WorkerThreadSection(int id, const int64_t timeoutMs) : Section(id, timeoutMs) {} WorkerThreadSection::~WorkerThreadSection() {} Loading Loading @@ -425,8 +426,8 @@ status_t CommandSection::Execute(ReportWriter* writer) const { } // ================================================================================ DumpsysSection::DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...) : WorkerThreadSection(id, REMOTE_CALL_TIMEOUT_MS, userdebugAndEngOnly), mService(service) { DumpsysSection::DumpsysSection(int id, const char* service, ...) : WorkerThreadSection(id, REMOTE_CALL_TIMEOUT_MS), mService(service) { name = "dumpsys "; name += service; Loading
cmds/incidentd/src/Section.h +18 −5 Original line number Diff line number Diff line Loading @@ -40,10 +40,9 @@ class Section { public: const int id; const int64_t timeoutMs; // each section must have a timeout const bool userdebugAndEngOnly; String8 name; Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool userdebugAndEngOnly = false); Section(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~Section(); virtual status_t Execute(ReportWriter* writer) const = 0; Loading Loading @@ -85,8 +84,7 @@ private: */ class WorkerThreadSection : public Section { public: WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS, bool userdebugAndEngOnly = false); WorkerThreadSection(int id, int64_t timeoutMs = REMOTE_CALL_TIMEOUT_MS); virtual ~WorkerThreadSection(); virtual status_t Execute(ReportWriter* writer) const; Loading Loading @@ -116,7 +114,7 @@ private: */ class DumpsysSection : public WorkerThreadSection { public: DumpsysSection(int id, bool userdebugAndEngOnly, const char* service, ...); DumpsysSection(int id, const char* service, ...); virtual ~DumpsysSection(); virtual status_t BlockingCall(int pipeWriteFd) const; Loading @@ -126,6 +124,21 @@ private: Vector<String16> mArgs; }; /** * Section that calls dumpsys on a system service. */ class SystemPropertyDumpsysSection : public WorkerThreadSection { public: SystemPropertyDumpsysSection(int id, const char* service, ...); virtual ~SystemPropertyDumpsysSection(); virtual status_t BlockingCall(int pipeWriteFd) const; private: String16 mService; Vector<String16> mArgs; }; /** * Section that reads from logd. */ Loading
tools/incident_section_gen/main.cpp +13 −4 Original line number Diff line number Diff line Loading @@ -408,10 +408,16 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { for (int i=0; i<descriptor->field_count(); i++) { const FieldDescriptor* field = descriptor->field(i); if (field->type() != FieldDescriptor::TYPE_MESSAGE && field->type() != FieldDescriptor::TYPE_STRING) { if (field->type() != FieldDescriptor::TYPE_MESSAGE && field->type() != FieldDescriptor::TYPE_STRING) { continue; } const SectionFlags s = getSectionFlags(field); if (s.userdebug_and_eng_only()) { printf("#if ALLOW_RESTRICTED_SECTIONS\n"); } switch (s.type()) { case SECTION_NONE: continue; Loading @@ -424,8 +430,7 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { printf(" NULL),\n"); break; case SECTION_DUMPSYS: printf(" new DumpsysSection(%d, %s,", field->number(), s.userdebug_and_eng_only() ? "true" : "false"); printf(" new DumpsysSection(%d, ", field->number()); splitAndPrint(s.args()); printf(" NULL),\n"); break; Loading @@ -438,9 +443,13 @@ static bool generateSectionListCpp(Descriptor const* descriptor) { printf(" NULL),\n"); break; case SECTION_TOMBSTONE: printf(" new TombstoneSection(%d, \"%s\"),\n", field->number(), s.args().c_str()); printf(" new TombstoneSection(%d, \"%s\"),\n", field->number(), s.args().c_str()); break; } if (s.userdebug_and_eng_only()) { printf("#endif\n"); } } printf(" NULL };\n"); Loading