From 2a4d05a4e38b84cf287bb2d2266c07b6f10c9dee Mon Sep 17 00:00:00 2001 From: Nick Kralevich Date: Tue, 1 Jul 2014 10:57:16 -0700 Subject: [PATCH] implement LOG_EVENT_STRING Implement LOG_EVENT_STRING, so that native code can create new event log entries. This is needed to support logging SELinux denials to the event log. Change-Id: I6a269a832bc2f5e5da6c9dbd169ed2f901b49166 --- include/log/log.h | 2 +- include/log/logd.h | 1 + liblog/logd_write.c | 22 ++++++++++++++++++++++ liblog/logd_write_kern.c | 22 ++++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) diff --git a/include/log/log.h b/include/log/log.h index 5b76c1a4b..ace12d631 100644 --- a/include/log/log.h +++ b/include/log/log.h @@ -491,7 +491,7 @@ typedef enum { #endif #ifndef LOG_EVENT_STRING #define LOG_EVENT_STRING(_tag, _value) \ - ((void) 0) /* not implemented -- must combine len with string */ + (void) __android_log_bswrite(_tag, _value); #endif /* TODO: something for LIST */ diff --git a/include/log/logd.h b/include/log/logd.h index 379c37334..2e6f22005 100644 --- a/include/log/logd.h +++ b/include/log/logd.h @@ -41,6 +41,7 @@ extern "C" { int __android_log_bwrite(int32_t tag, const void *payload, size_t len); int __android_log_btwrite(int32_t tag, char type, const void *payload, size_t len); +int __android_log_bswrite(int32_t tag, const char *payload); #ifdef __cplusplus } diff --git a/liblog/logd_write.c b/liblog/logd_write.c index f10eb8e0b..1da55ab98 100644 --- a/liblog/logd_write.c +++ b/liblog/logd_write.c @@ -473,3 +473,25 @@ int __android_log_btwrite(int32_t tag, char type, const void *payload, return write_to_log(LOG_ID_EVENTS, vec, 3); } + +/* + * Like __android_log_bwrite, but used for writing strings to the + * event log. + */ +int __android_log_bswrite(int32_t tag, const char *payload) +{ + struct iovec vec[4]; + char type = EVENT_TYPE_STRING; + uint32_t len = strlen(payload); + + vec[0].iov_base = &tag; + vec[0].iov_len = sizeof(tag); + vec[1].iov_base = &type; + vec[1].iov_len = sizeof(type); + vec[2].iov_base = &len; + vec[2].iov_len = sizeof(len); + vec[3].iov_base = (void*)payload; + vec[3].iov_len = len; + + return write_to_log(LOG_ID_EVENTS, vec, 4); +} diff --git a/liblog/logd_write_kern.c b/liblog/logd_write_kern.c index 1d107481d..1ed5ecfbf 100644 --- a/liblog/logd_write_kern.c +++ b/liblog/logd_write_kern.c @@ -317,3 +317,25 @@ int __android_log_btwrite(int32_t tag, char type, const void *payload, return write_to_log(LOG_ID_EVENTS, vec, 3); } + +/* + * Like __android_log_bwrite, but used for writing strings to the + * event log. + */ +int __android_log_bswrite(int32_t tag, const char *payload) +{ + struct iovec vec[4]; + char type = EVENT_TYPE_STRING; + uint32_t len = strlen(payload); + + vec[0].iov_base = &tag; + vec[0].iov_len = sizeof(tag); + vec[1].iov_base = &type; + vec[1].iov_len = sizeof(type); + vec[2].iov_base = &len; + vec[2].iov_len = sizeof(len); + vec[3].iov_base = (void*)payload; + vec[3].iov_len = len; + + return write_to_log(LOG_ID_EVENTS, vec, 4); +}