mirror of https://gitee.com/openkylin/linux.git
powerpc: Rework syscall_get_arguments() so there is only one loop
Currently syscall_get_arguments() has two loops, one for compat and one for regular tasks. In prepartion for the next patch, which changes which registers we use, switch it to only have one loop, so we only have one place to update. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Reviewed-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
1b1a3702a6
commit
a765784429
|
@ -64,19 +64,16 @@ static inline void syscall_get_arguments(struct task_struct *task,
|
||||||
unsigned int i, unsigned int n,
|
unsigned int i, unsigned int n,
|
||||||
unsigned long *args)
|
unsigned long *args)
|
||||||
{
|
{
|
||||||
|
unsigned long mask = -1UL;
|
||||||
|
|
||||||
BUG_ON(i + n > 6);
|
BUG_ON(i + n > 6);
|
||||||
#ifdef CONFIG_PPC64
|
|
||||||
if (test_tsk_thread_flag(task, TIF_32BIT)) {
|
#ifdef CONFIG_COMPAT
|
||||||
/*
|
if (test_tsk_thread_flag(task, TIF_32BIT))
|
||||||
* Zero-extend 32-bit argument values. The high bits are
|
mask = 0xffffffff;
|
||||||
* garbage ignored by the actual syscall dispatch.
|
|
||||||
*/
|
|
||||||
while (n-- > 0)
|
|
||||||
args[n] = (u32) regs->gpr[3 + i + n];
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
memcpy(args, ®s->gpr[3 + i], n * sizeof(args[0]));
|
while (n--)
|
||||||
|
args[n] = regs->gpr[3 + i + n] & mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void syscall_set_arguments(struct task_struct *task,
|
static inline void syscall_set_arguments(struct task_struct *task,
|
||||||
|
|
Loading…
Reference in New Issue