[PATCH] cobalt/posix/syscall: Account for changes in kernel 7.0

Jan Kiszka <[email protected]>
Newsgroups dev.linux.lists.xenomai
Message-ID <[email protected]>
From: Jan Kiszka <[email protected]>

With 7.0, we no longer have a access to trace print function that takes
the string size directly. [__]trace_puts will now always invoke strlen
on the passed string. We therefore need to terminate our string
properly, even if a larger one was passed.

We could keep the micro-optimized variant for older kernels, but as that
is phasing out and the gain is likely minimal (the string is still in L1
cache after copy_from_user), simply switch all versions to the same
pattern.

Signed-off-by: Jan Kiszka <[email protected]>
---
 kernel/cobalt/posix/syscall.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/kernel/cobalt/posix/syscall.c b/kernel/cobalt/posix/syscall.c
index a26da154c4..bc1825676f 100644
--- a/kernel/cobalt/posix/syscall.c
+++ b/kernel/cobalt/posix/syscall.c
@@ -46,6 +46,12 @@
 #include "../debug.h"
 #include <trace/events/cobalt-posix.h>
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(7,0,0)
+#include <linux/trace_printk.h>
+#else
+#include <linux/kernel.h>
+#endif
+
 /* Syscall must run into the Linux domain. */
 #define __xn_exec_lostage    0x1
 /* Syscall must run into the Xenomai domain. */
@@ -194,12 +200,13 @@ static COBALT_SYSCALL(ftrace_puts, current,
 	char buf[256];
 	unsigned len;
 
-	len = cobalt_strncpy_from_user(buf, str, sizeof(buf));
+	len = cobalt_strncpy_from_user(buf, str, sizeof(buf) - 1);
 	if (len < 0)
 		return -EFAULT;
 
 #ifdef CONFIG_TRACING
-	__trace_puts(_THIS_IP_, buf, len);
+	buf[sizeof(buf) - 1] = 0;
+	trace_puts(buf);
 #endif
 
 	return 0;
-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.