aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiƩbaud Weksteen <tweek@google.com>2023-04-06 01:06:25 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-06 01:06:25 +0000
commit0db1ceb25e2795a469de4d73881a572520e1947f (patch)
tree413ffa3254b94c6df688b8d850dcab978f05008d
parenta427bb67d66601fe8e4760a4d8a54057755be612 (diff)
parent829be6bea01e3ec1ad2c57949d4d8feeef5beb0b (diff)
downloadselinux-0db1ceb25e2795a469de4d73881a572520e1947f.tar.gz
Skip newlines for SELinux logs am: 366f01fd64 am: 273398f7b8 am: 829be6bea0
Original change: https://android-review.googlesource.com/c/platform/external/selinux/+/2519660 Change-Id: Ib80972ee47715b990e2d47fd5dc1535438f643b8 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libselinux/src/android/android.c92
1 files changed, 45 insertions, 47 deletions
diff --git a/libselinux/src/android/android.c b/libselinux/src/android/android.c
index c883c7aa..ab0a15f8 100644
--- a/libselinux/src/android/android.c
+++ b/libselinux/src/android/android.c
@@ -176,57 +176,55 @@ struct selabel_handle* selinux_android_keystore2_key_context_handle(void)
return context_handle(SELABEL_CTX_ANDROID_KEYSTORE2_KEY, &keystore2_context_paths, "keystore2");
}
+static void __selinux_log_callback(bool add_to_event_log, int type, const char *fmt, va_list ap) {
+ int priority;
+ char *strp;
+
+ switch(type) {
+ case SELINUX_WARNING:
+ priority = ANDROID_LOG_WARN;
+ break;
+ case SELINUX_INFO:
+ priority = ANDROID_LOG_INFO;
+ break;
+ default:
+ priority = ANDROID_LOG_ERROR;
+ break;
+ }
+
+ int len = vasprintf(&strp, fmt, ap);
+ if (len < 0) {
+ return;
+ }
+
+ /* libselinux log messages usually contain a new line character, while
+ * Android LOG() does not expect it. Remove it to avoid empty lines in
+ * the log buffers.
+ */
+ if (len > 0 && strp[len - 1] == '\n') {
+ strp[len - 1] = '\0';
+ }
+ LOG_PRI(priority, "SELinux", "%s", strp);
+ if (add_to_event_log) {
+ LOG_EVENT_STRING(AUDITD_LOG_TAG, strp);
+ }
+ free(strp);
+}
+
int selinux_log_callback(int type, const char *fmt, ...)
{
- va_list ap;
- int priority;
- char *strp;
-
- switch(type) {
- case SELINUX_WARNING:
- priority = ANDROID_LOG_WARN;
- break;
- case SELINUX_INFO:
- priority = ANDROID_LOG_INFO;
- break;
- default:
- priority = ANDROID_LOG_ERROR;
- break;
- }
-
- va_start(ap, fmt);
- if (vasprintf(&strp, fmt, ap) != -1) {
- LOG_PRI(priority, "SELinux", "%s", strp);
- LOG_EVENT_STRING(AUDITD_LOG_TAG, strp);
- free(strp);
- }
- va_end(ap);
- return 0;
+ va_list ap;
+ va_start(ap, fmt);
+ __selinux_log_callback(true, type, fmt, ap);
+ va_end(ap);
+ return 0;
}
int selinux_vendor_log_callback(int type, const char *fmt, ...)
{
- va_list ap;
- int priority;
- char *strp;
-
- switch(type) {
- case SELINUX_WARNING:
- priority = ANDROID_LOG_WARN;
- break;
- case SELINUX_INFO:
- priority = ANDROID_LOG_INFO;
- break;
- default:
- priority = ANDROID_LOG_ERROR;
- break;
- }
-
- va_start(ap, fmt);
- if (vasprintf(&strp, fmt, ap) != -1) {
- LOG_PRI(priority, "SELinux", "%s", strp);
- free(strp);
- }
- va_end(ap);
- return 0;
+ va_list ap;
+ va_start(ap, fmt);
+ __selinux_log_callback(false, type, fmt, ap);
+ va_end(ap);
+ return 0;
}