Merge changes Id163902d,I44f837e8,I11131e3f
* changes:
Remove AUDIO_CHANNEL_OUT_SURROUND
Add AUDIO_CHANNEL_OUT_5POINT1_SIDE and AUDIO_CHANNEL_OUT_QUAD_SIDE
Rename AUDIO_CHANNEL_OUT_QUAD and AUDIO_CHANNEL_OUT_5POINT1
diff --git a/libbacktrace/Android.mk b/libbacktrace/Android.mk
index a0ff95f..a7305da 100755
--- a/libbacktrace/Android.mk
+++ b/libbacktrace/Android.mk
@@ -96,11 +96,8 @@
-fno-builtin \
-O0 \
-g \
- -DGTEST_HAS_STD_STRING \
- -fstack-protector-all \
backtrace_test_cflags_target := \
- -DGTEST_OS_LINUX_ANDROID \
-DENABLE_PSS_TESTS \
backtrace_test_src_files := \
diff --git a/logd/CommandListener.cpp b/logd/CommandListener.cpp
index a7bf92b..1f3fd0e 100644
--- a/logd/CommandListener.cpp
+++ b/logd/CommandListener.cpp
@@ -21,6 +21,7 @@
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
+#include <sys/prctl.h>
#include <sys/socket.h>
#include <sys/types.h>
@@ -66,8 +67,13 @@
, mBuf(*buf)
{ }
+static void setname() {
+ prctl(PR_SET_NAME, "logd.control");
+}
+
int CommandListener::ClearCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
if (!clientHasLogCredentials(cli)) {
cli->sendMsg("Permission Denied");
return 0;
@@ -96,6 +102,7 @@
int CommandListener::GetBufSizeCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
if (argc < 2) {
cli->sendMsg("Missing Argument");
return 0;
@@ -121,6 +128,7 @@
int CommandListener::SetBufSizeCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
if (!clientHasLogCredentials(cli)) {
cli->sendMsg("Permission Denied");
return 0;
@@ -154,6 +162,7 @@
int CommandListener::GetBufSizeUsedCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
if (argc < 2) {
cli->sendMsg("Missing Argument");
return 0;
@@ -197,6 +206,7 @@
int CommandListener::GetStatisticsCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
uid_t uid = cli->getUid();
gid_t gid = cli->getGid();
if (clientHasLogCredentials(cli)) {
@@ -236,6 +246,7 @@
int CommandListener::GetPruneListCmd::runCommand(SocketClient *cli,
int /*argc*/, char ** /*argv*/) {
+ setname();
char *buf = NULL;
mBuf.formatPrune(&buf);
if (!buf) {
@@ -255,6 +266,7 @@
int CommandListener::SetPruneListCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
+ setname();
if (!clientHasLogCredentials(cli)) {
cli->sendMsg("Permission Denied");
return 0;
diff --git a/logd/LogAudit.cpp b/logd/LogAudit.cpp
index ea6eece..add0f0e 100644
--- a/logd/LogAudit.cpp
+++ b/logd/LogAudit.cpp
@@ -16,9 +16,11 @@
#include <ctype.h>
#include <errno.h>
+#include <limits.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/klog.h>
+#include <sys/prctl.h>
#include <sys/uio.h>
#include "libaudit.h"
@@ -34,8 +36,14 @@
}
bool LogAudit::onDataAvailable(SocketClient *cli) {
+ prctl(PR_SET_NAME, "logd.auditd");
+
struct audit_message rep;
+ rep.nlh.nlmsg_type = 0;
+ rep.nlh.nlmsg_len = 0;
+ rep.data[0] = '\0';
+
if (audit_get_reply(cli->getSocket(), &rep, GET_REPLY_BLOCKING, 0) < 0) {
SLOGE("Failed on audit_get_reply with error: %s", strerror(errno));
return false;
@@ -143,11 +151,8 @@
strcpy(newstr + 1 + l, str);
free(str);
- unsigned short len = n; // cap to internal maximum
- if (len != n) {
- len = -1;
- }
- logbuf->log(AUDIT_LOG_ID, now, uid, pid, tid, newstr, len);
+ logbuf->log(AUDIT_LOG_ID, now, uid, pid, tid, newstr,
+ (n <= USHRT_MAX) ? (unsigned short) n : USHRT_MAX);
reader->notifyNewLog();
free(newstr);
diff --git a/logd/LogListener.cpp b/logd/LogListener.cpp
index 1d0a51c..6ff4d3a 100644
--- a/logd/LogListener.cpp
+++ b/logd/LogListener.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <limits.h>
+#include <sys/prctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
@@ -31,6 +33,8 @@
{ }
bool LogListener::onDataAvailable(SocketClient *cli) {
+ prctl(PR_SET_NAME, "logd.writer");
+
char buffer[sizeof_log_id_t + sizeof(uint16_t) + sizeof(log_time)
+ LOGGER_ENTRY_MAX_PAYLOAD];
struct iovec iov = { buffer, sizeof(buffer) };
@@ -97,11 +101,10 @@
// NB: hdr.msg_flags & MSG_TRUNC is not tested, silently passing a
// truncated message to the logs.
- unsigned short len = n; // cap to internal maximum
- if (len == n) {
- logbuf->log(log_id, realtime, cred->uid, cred->pid, tid, msg, len);
- reader->notifyNewLog();
- }
+
+ logbuf->log(log_id, realtime, cred->uid, cred->pid, tid, msg,
+ (n <= USHRT_MAX) ? (unsigned short) n : USHRT_MAX);
+ reader->notifyNewLog();
return true;
}
diff --git a/logd/LogReader.cpp b/logd/LogReader.cpp
index 51aa2ad..8458c19 100644
--- a/logd/LogReader.cpp
+++ b/logd/LogReader.cpp
@@ -16,6 +16,7 @@
#include <ctype.h>
#include <poll.h>
+#include <sys/prctl.h>
#include <sys/socket.h>
#include <cutils/sockets.h>
@@ -36,6 +37,8 @@
}
bool LogReader::onDataAvailable(SocketClient *cli) {
+ prctl(PR_SET_NAME, "logd.reader");
+
char buffer[255];
int len = read(cli->getSocket(), buffer, sizeof(buffer) - 1);
diff --git a/logd/LogTimes.cpp b/logd/LogTimes.cpp
index c32ac2d..1a9a548 100644
--- a/logd/LogTimes.cpp
+++ b/logd/LogTimes.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#include <sys/prctl.h>
+
#include "FlushCommand.h"
#include "LogBuffer.h"
#include "LogTimes.h"
@@ -107,6 +109,8 @@
}
void *LogTimeEntry::threadStart(void *obj) {
+ prctl(PR_SET_NAME, "logd.reader.per");
+
LogTimeEntry *me = reinterpret_cast<LogTimeEntry *>(obj);
pthread_cleanup_push(threadStop, obj);
diff --git a/logd/README.property b/logd/README.property
index 15a49db..5d92d09 100644
--- a/logd/README.property
+++ b/logd/README.property
@@ -1,11 +1,12 @@
The properties that logd responds to are:
name type default description
+logd.auditd bool true Enable selinux audit daemon
logd.auditd.dmesg bool true selinux audit messages duplicated and
sent on to dmesg log
-logd.dgram_qlen.statistics bool false Record dgram_qlen statistics. This
+logd.statistics.dgram_qlen bool false Record dgram_qlen statistics. This
represents a performance impact and
is used to determine the platform's
minimum domain socket network FIFO
size (see source for details) based
- on typical load (logcat -S)
+ on typical load (logcat -S to view)
diff --git a/logd/main.cpp b/logd/main.cpp
index 04eef4a..ece5a3a 100644
--- a/logd/main.cpp
+++ b/logd/main.cpp
@@ -107,16 +107,31 @@
return 0;
}
+// Property helper
+static bool property_get_bool(const char *key, bool def) {
+ char property[PROPERTY_VALUE_MAX];
+ property_get(key, property, "");
+
+ if (!strcasecmp(property, "true")) {
+ return true;
+ }
+ if (!strcasecmp(property, "false")) {
+ return false;
+ }
+
+ return def;
+}
+
// Foreground waits for exit of the three main persistent threads that
// are started here. The three threads are created to manage UNIX
// domain client sockets for writing, reading and controlling the user
// space logger. Additional transitory per-client threads are created
// for each reader once they register.
int main() {
+ bool auditd = property_get_bool("logd.auditd", true);
+
int fdDmesg = -1;
- char dmesg[PROPERTY_VALUE_MAX];
- property_get("logd.auditd.dmesg", dmesg, "1");
- if (atol(dmesg)) {
+ if (auditd && property_get_bool("logd.auditd.dmesg", true)) {
fdDmesg = open("/dev/kmsg", O_WRONLY);
}
@@ -135,9 +150,7 @@
LogBuffer *logBuf = new LogBuffer(times);
- char dgram_qlen_statistics[PROPERTY_VALUE_MAX];
- property_get("logd.dgram_qlen.statistics", dgram_qlen_statistics, "");
- if (atol(dgram_qlen_statistics)) {
+ if (property_get_bool("logd.statistics.dgram_qlen", false)) {
logBuf->enableDgramQlenStatistics();
}
@@ -171,11 +184,13 @@
// initiated log messages. New log entries are added to LogBuffer
// and LogReader is notified to send updates to connected clients.
- // failure is an option ... messages are in dmesg (required by standard)
- LogAudit *al = new LogAudit(logBuf, reader, fdDmesg);
- if (al->startListener()) {
- delete al;
- close(fdDmesg);
+ if (auditd) {
+ // failure is an option ... messages are in dmesg (required by standard)
+ LogAudit *al = new LogAudit(logBuf, reader, fdDmesg);
+ if (al->startListener()) {
+ delete al;
+ close(fdDmesg);
+ }
}
pause();