MIPS: asm: syscall: Fix copying system call arguments
authorMarkos Chandras <markos.chandras@imgtec.com>
Wed, 22 Jan 2014 14:39:57 +0000 (14:39 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Mon, 17 Mar 2014 14:34:28 +0000 (15:34 +0100)
The syscall_get_arguments function expects the arguments to be copied
to the '*args' argument but instead a local variable was used to hold
the system call argument. As a result of which, this variable was
never passed to the filter and any filter testing the system call
arguments would fail. This is fixed by passing the '*args' variable
as the destination memory for the system call arguments.

Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Reviewed-by: Paul Burton <paul.burton@imgtec.com>
Reviewed-by: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/6402/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/syscall.h

index 5ce530fcb11f8a92f228e3c965800522069af0e4..a7e8a532f144096edae07d79f72e5182e00d1592 100644 (file)
@@ -86,11 +86,10 @@ static inline void syscall_get_arguments(struct task_struct *task,
                                         unsigned int i, unsigned int n,
                                         unsigned long *args)
 {
-       unsigned long arg;
        int ret;
 
        while (n--)
-               ret |= mips_get_syscall_arg(&arg, task, regs, i++);
+               ret |= mips_get_syscall_arg(args++, task, regs, i++);
 
        /*
         * No way to communicate an error because this is a void function.