Blame SOURCES/0051-debug-don-t-write-newlines-to-memfd.patch

4e0e09
From f9797c91e190fc53ce997beb1e7c2a140abfd665 Mon Sep 17 00:00:00 2001
4e0e09
From: Peter Jones <pjones@redhat.com>
4e0e09
Date: Tue, 15 Oct 2019 16:27:39 -0400
4e0e09
Subject: [PATCH 51/63] debug(): don't write newlines to memfd
4e0e09
4e0e09
If we know our log will only be seen by strace, the newlines don't add
4e0e09
anything to the strings but clutter.
4e0e09
4e0e09
Signed-off-by: Peter Jones <pjones@redhat.com>
4e0e09
---
4e0e09
 src/error.c | 16 ++++++++++++++--
4e0e09
 1 file changed, 14 insertions(+), 2 deletions(-)
4e0e09
4e0e09
diff --git a/src/error.c b/src/error.c
4e0e09
index 083de15e984..8ceba31dd55 100644
4e0e09
--- a/src/error.c
4e0e09
+++ b/src/error.c
4e0e09
@@ -27,6 +27,7 @@
4e0e09
 #include <stdio.h>
4e0e09
 #include <string.h>
4e0e09
 #include <sys/mman.h>
4e0e09
+#include <sys/random.h>
4e0e09
 #include <unistd.h>
4e0e09
 
4e0e09
 #include "efiboot.h"
4e0e09
@@ -166,6 +167,7 @@ efi_error_pop(void)
4e0e09
 static int efi_verbose;
4e0e09
 static FILE *efi_errlog, *efi_dbglog;
4e0e09
 static int efi_dbglog_fd = -1;
4e0e09
+static intptr_t efi_dbglog_cookie;
4e0e09
 static int log_level;
4e0e09
 static char efi_dbglog_buf[4096];
4e0e09
 
4e0e09
@@ -176,7 +178,7 @@ efi_set_loglevel(int level)
4e0e09
 }
4e0e09
 
4e0e09
 static ssize_t
4e0e09
-dbglog_write(void *cookie UNUSED, const char *buf, size_t size)
4e0e09
+dbglog_write(void *cookie, const char *buf, size_t size)
4e0e09
 {
4e0e09
 	FILE *log = efi_errlog ? efi_errlog : stderr;
4e0e09
 	ssize_t ret = size;
4e0e09
@@ -185,6 +187,11 @@ dbglog_write(void *cookie UNUSED, const char *buf, size_t size)
4e0e09
 		ret = fwrite(buf, 1, size, log);
4e0e09
 	} else if (efi_dbglog_fd >= 0) {
4e0e09
 		lseek(efi_dbglog_fd, 0, SEEK_SET);
4e0e09
+		if ((intptr_t)cookie != 0 &&
4e0e09
+		    (intptr_t)cookie == efi_dbglog_cookie &&
4e0e09
+		    size > 0 &&
4e0e09
+		    buf[size-1] == '\n')
4e0e09
+			size -= 1;
4e0e09
 		ret = write(efi_dbglog_fd, buf, size);
4e0e09
 	}
4e0e09
 	return ret;
4e0e09
@@ -248,6 +255,7 @@ efi_error_fini(void)
4e0e09
 static void CONSTRUCTOR
4e0e09
 efi_error_init(void)
4e0e09
 {
4e0e09
+	ssize_t bytes;
4e0e09
 	cookie_io_functions_t io_funcs = {
4e0e09
 		.write = dbglog_write,
4e0e09
 		.seek = dbglog_seek,
4e0e09
@@ -258,7 +266,11 @@ efi_error_init(void)
4e0e09
 	if (efi_dbglog_fd == -1)
4e0e09
 		return;
4e0e09
 
4e0e09
-	efi_dbglog = fopencookie(NULL, "a", io_funcs);
4e0e09
+	bytes = getrandom(&efi_dbglog_cookie, sizeof(efi_dbglog_cookie), 0);
4e0e09
+	if (bytes < (ssize_t)sizeof(efi_dbglog_cookie))
4e0e09
+		efi_dbglog_cookie = 0;
4e0e09
+
4e0e09
+	efi_dbglog = fopencookie((void *)efi_dbglog_cookie, "a", io_funcs);
4e0e09
 	if (efi_dbglog)
4e0e09
 		setvbuf(efi_dbglog, efi_dbglog_buf, _IOLBF,
4e0e09
 			sizeof(efi_dbglog_buf));
4e0e09
-- 
4e0e09
2.26.2
4e0e09