x86/regs: Syscall_get_nr() returns -1 for a non-system call
syscall_get_nr() is defined to return -1 for a non-system call or a ptrace/seccomp restart; not just any arbitrary number. See comment in <asm-generic/syscall.h> for the official definition of this function. Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Ingo Molnar <mingo@kernel.org> Link: https://lore.kernel.org/r/20210510185316.3307264-7-hpa@zytor.com
This commit is contained in:
parent
29e9758966
commit
9ddcb87b92
@ -911,7 +911,7 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 value)
|
||||
* syscall with TS_COMPAT still set.
|
||||
*/
|
||||
regs->orig_ax = value;
|
||||
if (syscall_get_nr(child, regs) >= 0)
|
||||
if (syscall_get_nr(child, regs) != -1)
|
||||
child->thread_info.status |= TS_I386_REGS_POKED;
|
||||
break;
|
||||
|
||||
|
@ -713,7 +713,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
||||
save_v86_state((struct kernel_vm86_regs *) regs, VM86_SIGNAL);
|
||||
|
||||
/* Are we from a system call? */
|
||||
if (syscall_get_nr(current, regs) >= 0) {
|
||||
if (syscall_get_nr(current, regs) != -1) {
|
||||
/* If so, check system call restarting.. */
|
||||
switch (syscall_get_error(current, regs)) {
|
||||
case -ERESTART_RESTARTBLOCK:
|
||||
@ -793,7 +793,7 @@ void arch_do_signal_or_restart(struct pt_regs *regs, bool has_signal)
|
||||
}
|
||||
|
||||
/* Did we come from a system call? */
|
||||
if (syscall_get_nr(current, regs) >= 0) {
|
||||
if (syscall_get_nr(current, regs) != -1) {
|
||||
/* Restart the system call - no handlers present */
|
||||
switch (syscall_get_error(current, regs)) {
|
||||
case -ERESTARTNOHAND:
|
||||
|
Loading…
Reference in New Issue
Block a user