Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37c66e5e authored by Joe Onorato's avatar Joe Onorato Committed by Android (Google) Code Review
Browse files

Merge "incidentd sections for userdebug and eng are compiled out"

parents ee7be58a fe7bbf41
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -66,6 +66,13 @@ cc_binary {
        "libplatformprotos",
    ],

    product_variables: {
        debuggable: {
            cflags: ["-DALLOW_RESTRICTED_SECTIONS=1"],
        },
    },


    init_rc: ["incidentd.rc"],
}

+0 −10
Original line number Diff line number Diff line
@@ -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>
@@ -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;

@@ -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;
+9 −8
Original line number Diff line number Diff line
@@ -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>
@@ -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() {}

@@ -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);
@@ -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() {}

@@ -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;

+18 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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.
 */
+13 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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");