Hi Steve,
Steven Rostedt rostedt@goodmis.org writes:
From: Steven Rostedt rostedt@goodmis.org
Pingfan reported that the following causes a fault:
echo "filename ~ "cpu"" > events/syscalls/sys_enter_openat/filter echo 1 > events/syscalls/sys_enter_at/enable
[..]
+static __always_inline char *test_string(char *str) +{
- struct ustring_buffer *ubuf;
 - char __user *ustr;
 - char *kstr;
 - if (!ustring_per_cpu)
 return NULL;- ubuf = this_cpu_ptr(ustring_per_cpu);
 - kstr = ubuf->buffer;
 - if (likely((unsigned long)str >= TASK_SIZE)) {
 
I think that would not work on architectures where addresses for kernel and user space could overlap, i.e. with different address spaces?
/* For safety, do not trust the string pointer */if (!strncpy_from_kernel_nofault(kstr, str, USTRING_BUF_SIZE))return NULL;- } else {
 /* user space address? */ustr = str;if (!strncpy_from_user_nofault(kstr, ustr, USTRING_BUF_SIZE))return NULL;- }
 - return kstr;
 +}