summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes2018-06-13 12:33:45 -0500
committerElliott Hughes2018-06-13 12:34:43 -0500
commitcef62b4014cd7df825a13ce115074eda427ca3b5 (patch)
treeb3f09ad8636256c6d0159e13c97d60abf32c2b14 /logd/main.cpp
parent7222199281b824fbe08f216860d2cd5153d33d11 (diff)
downloadplatform-system-core-cef62b4014cd7df825a13ce115074eda427ca3b5.tar.gz
platform-system-core-cef62b4014cd7df825a13ce115074eda427ca3b5.tar.xz
platform-system-core-cef62b4014cd7df825a13ce115074eda427ca3b5.zip
logd: make behavior more consistent across builds.
Bug: 110127913 Test: boots Change-Id: I0c1efacfb5ac0407e896ddde0bcc63927edc0525
Diffstat (limited to 'logd/main.cpp')
-rw-r--r--logd/main.cpp37
1 files changed, 16 insertions, 21 deletions
diff --git a/logd/main.cpp b/logd/main.cpp
index 5a588bea8..b697d44d7 100644
--- a/logd/main.cpp
+++ b/logd/main.cpp
@@ -87,30 +87,25 @@
87// 87//
88 88
89static int drop_privs(bool klogd, bool auditd) { 89static int drop_privs(bool klogd, bool auditd) {
90 // Tricky, if ro.build.type is "eng" then this is true because of the 90 sched_param param = {};
91 // side effect that ro.debuggable == 1 as well, else it is false.
92 bool eng =
93 __android_logger_property_get_bool("ro.build.type", BOOL_DEFAULT_FALSE);
94
95 struct sched_param param;
96 memset(&param, 0, sizeof(param));
97 91
98 if (set_sched_policy(0, SP_BACKGROUND) < 0) { 92 if (set_sched_policy(0, SP_BACKGROUND) < 0) {
99 android::prdebug("failed to set background scheduling policy"); 93 android::prdebug("failed to set background scheduling policy");
100 if (!eng) return -1; 94 return -1;
101 } 95 }
102 96
103 if (sched_setscheduler((pid_t)0, SCHED_BATCH, &param) < 0) { 97 if (sched_setscheduler((pid_t)0, SCHED_BATCH, &param) < 0) {
104 android::prdebug("failed to set batch scheduler"); 98 android::prdebug("failed to set batch scheduler");
105 if (!eng) return -1; 99 return -1;
106 } 100 }
107 101
108 if (setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_BACKGROUND) < 0) { 102 if (setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_BACKGROUND) < 0) {
109 android::prdebug("failed to set background cgroup"); 103 android::prdebug("failed to set background cgroup");
110 if (!eng) return -1; 104 return -1;
111 } 105 }
112 106
113 if (!eng && (prctl(PR_SET_DUMPABLE, 0) < 0)) { 107 if (__android_logger_property_get_bool("ro.debuggable", BOOL_DEFAULT_FALSE) &&
108 prctl(PR_SET_DUMPABLE, 0) == -1) {
114 android::prdebug("failed to clear PR_SET_DUMPABLE"); 109 android::prdebug("failed to clear PR_SET_DUMPABLE");
115 return -1; 110 return -1;
116 } 111 }
@@ -133,24 +128,24 @@ static int drop_privs(bool klogd, bool auditd) {
133 android::prdebug( 128 android::prdebug(
134 "failed to set CAP_SETGID, CAP_SYSLOG or CAP_AUDIT_CONTROL (%d)", 129 "failed to set CAP_SETGID, CAP_SYSLOG or CAP_AUDIT_CONTROL (%d)",
135 errno); 130 errno);
136 if (!eng) return -1; 131 return -1;
137 } 132 }
138 133
139 gid_t groups[] = { AID_READPROC }; 134 gid_t groups[] = { AID_READPROC };
140 135
141 if (setgroups(arraysize(groups), groups) == -1) { 136 if (setgroups(arraysize(groups), groups) == -1) {
142 android::prdebug("failed to set AID_READPROC groups"); 137 android::prdebug("failed to set AID_READPROC groups");
143 if (!eng) return -1; 138 return -1;
144 } 139 }
145 140
146 if (setgid(AID_LOGD) != 0) { 141 if (setgid(AID_LOGD) != 0) {
147 android::prdebug("failed to set AID_LOGD gid"); 142 android::prdebug("failed to set AID_LOGD gid");
148 if (!eng) return -1; 143 return -1;
149 } 144 }
150 145
151 if (setuid(AID_LOGD) != 0) { 146 if (setuid(AID_LOGD) != 0) {
152 android::prdebug("failed to set AID_LOGD uid"); 147 android::prdebug("failed to set AID_LOGD uid");
153 if (!eng) return -1; 148 return -1;
154 } 149 }
155 150
156 if (cap_set_flag(caps.get(), CAP_PERMITTED, 1, cap_value, CAP_CLEAR) < 0) { 151 if (cap_set_flag(caps.get(), CAP_PERMITTED, 1, cap_value, CAP_CLEAR) < 0) {
@@ -161,7 +156,7 @@ static int drop_privs(bool klogd, bool auditd) {
161 } 156 }
162 if (cap_set_proc(caps.get()) < 0) { 157 if (cap_set_proc(caps.get()) < 0) {
163 android::prdebug("failed to clear CAP_SETGID (%d)", errno); 158 android::prdebug("failed to clear CAP_SETGID (%d)", errno);
164 if (!eng) return -1; 159 return -1;
165 } 160 }
166 161
167 return 0; 162 return 0;
@@ -468,7 +463,7 @@ int main(int argc, char* argv[]) {
468 bool auditd = 463 bool auditd =
469 __android_logger_property_get_bool("ro.logd.auditd", BOOL_DEFAULT_TRUE); 464 __android_logger_property_get_bool("ro.logd.auditd", BOOL_DEFAULT_TRUE);
470 if (drop_privs(klogd, auditd) != 0) { 465 if (drop_privs(klogd, auditd) != 0) {
471 return -1; 466 return EXIT_FAILURE;
472 } 467 }
473 468
474 // Serves the purpose of managing the last logs times read on a 469 // Serves the purpose of managing the last logs times read on a
@@ -496,7 +491,7 @@ int main(int argc, char* argv[]) {
496 491
497 LogReader* reader = new LogReader(logBuf); 492 LogReader* reader = new LogReader(logBuf);
498 if (reader->startListener()) { 493 if (reader->startListener()) {
499 exit(1); 494 return EXIT_FAILURE;
500 } 495 }
501 496
502 // LogListener listens on /dev/socket/logdw for client 497 // LogListener listens on /dev/socket/logdw for client
@@ -506,7 +501,7 @@ int main(int argc, char* argv[]) {
506 LogListener* swl = new LogListener(logBuf, reader); 501 LogListener* swl = new LogListener(logBuf, reader);
507 // Backlog and /proc/sys/net/unix/max_dgram_qlen set to large value 502 // Backlog and /proc/sys/net/unix/max_dgram_qlen set to large value
508 if (swl->startListener(600)) { 503 if (swl->startListener(600)) {
509 exit(1); 504 return EXIT_FAILURE;
510 } 505 }
511 506
512 // Command listener listens on /dev/socket/logd for incoming logd 507 // Command listener listens on /dev/socket/logd for incoming logd
@@ -514,7 +509,7 @@ int main(int argc, char* argv[]) {
514 509
515 CommandListener* cl = new CommandListener(logBuf, reader, swl); 510 CommandListener* cl = new CommandListener(logBuf, reader, swl);
516 if (cl->startListener()) { 511 if (cl->startListener()) {
517 exit(1); 512 return EXIT_FAILURE;
518 } 513 }
519 514
520 // LogAudit listens on NETLINK_AUDIT socket for selinux 515 // LogAudit listens on NETLINK_AUDIT socket for selinux
@@ -549,5 +544,5 @@ int main(int argc, char* argv[]) {
549 544
550 TEMP_FAILURE_RETRY(pause()); 545 TEMP_FAILURE_RETRY(pause());
551 546
552 exit(0); 547 return EXIT_SUCCESS;
553} 548}