diff options
| author | Haoran Wang <haoranwangsec@gmail.com> | 2026-10-16 11:33:13 +0800 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2026-10-16 11:36:30 -0400 |
| commit | 097fd0050089df17b032f2b852b9b65e548e342a (patch) | |
| tree | 5481ba957e905eceb0ef290d4f8e0017053e974f /kernel/trace | |
| parent | d3e0dfc1ba49a0ab6aeddbb4bcde4bfc0e171a02 (diff) | |
| download | linux-next-097fd0050089df17b032f2b852b9b65e548e342a.tar.gz linux-next-097fd0050089df17b032f2b852b9b65e548e342a.zip | |
tracing/syscalls: Use copy_from_user for the faultable syscall buffer
syscall_copy_user_array() copies the buffer argument of faultable
syscalls (write, pwrite64, ...) with __copy_from_user(), which skips
access_ok(). Use copy_from_user() instead so a non-user address is
rejected and the entry is recorded as faulted.
It could be a security concern for machines that trust perf a bit too
much.
Cc: stable@vger.kernel.org
Fixes: baa031b7bd2ce ("tracing: Allow syscall trace events to read more than one user parameter")
Link: https://patch.msgid.link/6ad19afd.a938ce27.16851e.3440@mx.google.com
Signed-off-by: Haoran Wang <haoranwangsec@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace')
| -rw-r--r-- | kernel/trace/trace_syscalls.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index e35744049e3f..d9190fdc030d 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -683,7 +683,7 @@ static int syscall_copy_user_array(char *buf, const char __user *ptr, for (int i = 0; i < args->uargs; i++, buf += SYSCALL_FAULT_ARG_SZ) { ptr = (char __user *)args->ptr_array[i]; - ret = __copy_from_user(buf, ptr, size); + ret = copy_from_user(buf, ptr, size); args->read[i] = ret ? -1 : size; } return 0; |
