MIPS: Fix syscall_get_nr for the syscall exit tracing.
Register 2 is alredy overwritten by the return value when syscall_trace_leave() is called. Signed-off-by: Lars Persson <larper@axis.com> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9187/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
26f7c4bd05
commit
c2d9f17757
3 changed files with 4 additions and 7 deletions
|
@ -29,13 +29,7 @@
|
||||||
static inline long syscall_get_nr(struct task_struct *task,
|
static inline long syscall_get_nr(struct task_struct *task,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
/* O32 ABI syscall() - Either 64-bit with O32 or 32-bit */
|
return current_thread_info()->syscall;
|
||||||
if ((config_enabled(CONFIG_32BIT) ||
|
|
||||||
test_tsk_thread_flag(task, TIF_32BIT_REGS)) &&
|
|
||||||
(regs->regs[2] == __NR_syscall))
|
|
||||||
return regs->regs[4];
|
|
||||||
else
|
|
||||||
return regs->regs[2];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline unsigned long mips_get_syscall_arg(unsigned long *arg,
|
static inline unsigned long mips_get_syscall_arg(unsigned long *arg,
|
||||||
|
|
|
@ -36,6 +36,7 @@ struct thread_info {
|
||||||
*/
|
*/
|
||||||
struct restart_block restart_block;
|
struct restart_block restart_block;
|
||||||
struct pt_regs *regs;
|
struct pt_regs *regs;
|
||||||
|
long syscall; /* syscall number */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -770,6 +770,8 @@ asmlinkage long syscall_trace_enter(struct pt_regs *regs, long syscall)
|
||||||
long ret = 0;
|
long ret = 0;
|
||||||
user_exit();
|
user_exit();
|
||||||
|
|
||||||
|
current_thread_info()->syscall = syscall;
|
||||||
|
|
||||||
if (secure_computing() == -1)
|
if (secure_computing() == -1)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue