Skip to content

Commit a89b6e3

Browse files
olsajirigregkh
authored andcommitted
s390/syscalls: Fix out of bounds arguments access
commit c46fc04 upstream. Zorro reported following crash while having enabled syscall tracing (CONFIG_FTRACE_SYSCALLS): Unable to handle kernel pointer dereference at virtual ... Oops: 0011 [#1] SMP DEBUG_PAGEALLOC SNIP Call Trace: ([<000000000024d79c>] ftrace_syscall_enter+0xec/0x1d8) [<00000000001099c6>] do_syscall_trace_enter+0x236/0x2f8 [<0000000000730f1c>] sysc_tracesys+0x1a/0x32 [<000003fffcf946a2>] 0x3fffcf946a2 INFO: lockdep is turned off. Last Breaking-Event-Address: [<000000000022dd44>] rb_event_data+0x34/0x40 ---[ end trace 8c795f86b1b3f7b9 ]--- The crash happens in syscall_get_arguments function for syscalls with zero arguments, that will try to access first argument (args[0]) in event entry, but it's not allocated. Bail out of there are no arguments. Reported-by: Zorro Lang <[email protected]> Signed-off-by: Jiri Olsa <[email protected]> Signed-off-by: Martin Schwidefsky <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 0983339 commit a89b6e3

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

arch/s390/include/asm/syscall.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ static inline void syscall_get_arguments(struct task_struct *task,
6464
{
6565
unsigned long mask = -1UL;
6666

67+
/*
68+
* No arguments for this syscall, there's nothing to do.
69+
*/
70+
if (!n)
71+
return;
72+
6773
BUG_ON(i + n > 6);
6874
#ifdef CONFIG_COMPAT
6975
if (test_tsk_thread_flag(task, TIF_31BIT))

0 commit comments

Comments
 (0)