diff options
Diffstat (limited to 'logd/main.cpp')
-rw-r--r-- | logd/main.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/logd/main.cpp b/logd/main.cpp index 897e11e3a..c92c5b719 100644 --- a/logd/main.cpp +++ b/logd/main.cpp @@ -62,7 +62,9 @@ #include "SerializedLogBuffer.h" #include "SimpleLogBuffer.h" +using android::base::GetBoolProperty; using android::base::GetProperty; +using android::base::SetProperty; #define KMSG_PRIORITY(PRI) \ '<', '0' + LOG_MAKEPRI(LOG_DAEMON, LOG_PRI(PRI)) / 10, \ @@ -82,9 +84,10 @@ static void DropPrivs(bool klogd, bool auditd) { PLOG(FATAL) << "failed to set batch scheduler"; } - if (!__android_logger_property_get_bool("ro.debuggable", BOOL_DEFAULT_FALSE) && - prctl(PR_SET_DUMPABLE, 0) == -1) { - PLOG(FATAL) << "failed to clear PR_SET_DUMPABLE"; + if (!GetBoolProperty("ro.debuggable", false)) { + if (prctl(PR_SET_DUMPABLE, 0) == -1) { + PLOG(FATAL) << "failed to clear PR_SET_DUMPABLE"; + } } std::unique_ptr<struct _cap_struct, int (*)(void*)> caps(cap_init(), cap_free); @@ -110,6 +113,14 @@ static void DropPrivs(bool klogd, bool auditd) { } } +// GetBoolProperty that defaults to true if `ro.debuggable == true && ro.config.low_rawm == false`. +static bool GetBoolPropertyEngSvelteDefault(const std::string& name) { + bool default_value = + GetBoolProperty("ro.debuggable", false) && !GetBoolProperty("ro.config.low_ram", false); + + return GetBoolProperty(name, default_value); +} + char* android::uidToName(uid_t u) { struct Userdata { uid_t uid; @@ -207,6 +218,8 @@ static int issueReinit() { // logging plugins like auditd and restart control. Additional // transitory per-client threads are created for each reader. int main(int argc, char* argv[]) { + // We want EPIPE when a reader disconnects, not to terminate logd. + signal(SIGPIPE, SIG_IGN); // logd is written under the assumption that the timezone is UTC. // If TZ is not set, persist.sys.timezone is looked up in some time utility // libc functions, including mktime. It confuses the logd time handling, @@ -236,10 +249,9 @@ int main(int argc, char* argv[]) { } int fdPmesg = -1; - bool klogd = __android_logger_property_get_bool( - "ro.logd.kernel", - BOOL_DEFAULT_TRUE | BOOL_DEFAULT_FLAG_ENG | BOOL_DEFAULT_FLAG_SVELTE); + bool klogd = GetBoolPropertyEngSvelteDefault("ro.logd.kernel"); if (klogd) { + SetProperty("ro.logd.kernel", "true"); static const char proc_kmsg[] = "/proc/kmsg"; fdPmesg = android_get_control_file(proc_kmsg); if (fdPmesg < 0) { @@ -249,7 +261,7 @@ int main(int argc, char* argv[]) { if (fdPmesg < 0) PLOG(ERROR) << "Failed to open " << proc_kmsg; } - bool auditd = __android_logger_property_get_bool("ro.logd.auditd", BOOL_DEFAULT_TRUE); + bool auditd = GetBoolProperty("ro.logd.auditd", true); DropPrivs(klogd, auditd); // A cache of event log tags @@ -258,13 +270,11 @@ int main(int argc, char* argv[]) { // Pruning configuration. PruneList prune_list; - std::string buffer_type = GetProperty("logd.buffer_type", "chatty"); + std::string buffer_type = GetProperty("logd.buffer_type", "serialized"); // Partial (required for chatty) or full logging statistics. - bool enable_full_log_statistics = __android_logger_property_get_bool( - "logd.statistics", BOOL_DEFAULT_TRUE | BOOL_DEFAULT_FLAG_PERSIST | - BOOL_DEFAULT_FLAG_ENG | BOOL_DEFAULT_FLAG_SVELTE); - LogStatistics log_statistics(enable_full_log_statistics, buffer_type == "serialized"); + LogStatistics log_statistics(GetBoolPropertyEngSvelteDefault("logd.statistics"), + buffer_type == "serialized"); // Serves the purpose of managing the last logs times read on a socket connection, and as a // reader lock on a range of log entries. @@ -309,9 +319,7 @@ int main(int argc, char* argv[]) { // and LogReader is notified to send updates to connected clients. LogAudit* al = nullptr; if (auditd) { - int dmesg_fd = __android_logger_property_get_bool("ro.logd.auditd.dmesg", BOOL_DEFAULT_TRUE) - ? fdDmesg - : -1; + int dmesg_fd = GetBoolProperty("ro.logd.auditd.dmesg", true) ? fdDmesg : -1; al = new LogAudit(log_buffer, dmesg_fd, &log_statistics); } |