Skip newlines for SELinux logs am: 366f01fd64

Original change: https://android-review.googlesource.com/c/platform/external/selinux/+/2519660

Change-Id: Ifd367114af3b93af5a4cc5113205fbe4e3a71d64
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Thiébaud Weksteen 2023-04-06 00:06:50 +00:00 committed by Automerger Merge Worker
commit 273398f7b8

View file

@ -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"); 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, ...) int selinux_log_callback(int type, const char *fmt, ...)
{ {
va_list ap; va_list ap;
int priority; va_start(ap, fmt);
char *strp; __selinux_log_callback(true, type, fmt, ap);
va_end(ap);
switch(type) { return 0;
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;
} }
int selinux_vendor_log_callback(int type, const char *fmt, ...) int selinux_vendor_log_callback(int type, const char *fmt, ...)
{ {
va_list ap; va_list ap;
int priority; va_start(ap, fmt);
char *strp; __selinux_log_callback(false, type, fmt, ap);
va_end(ap);
switch(type) { return 0;
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;
} }