mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
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
2 changed files with 3 additions and 3 deletions
|
@ -911,7 +911,7 @@ static int putreg32(struct task_struct *child, unsigned regno, u32 value)
|
||||||
* syscall with TS_COMPAT still set.
|
* syscall with TS_COMPAT still set.
|
||||||
*/
|
*/
|
||||||
regs->orig_ax = value;
|
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;
|
child->thread_info.status |= TS_I386_REGS_POKED;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -713,7 +713,7 @@ handle_signal(struct ksignal *ksig, struct pt_regs *regs)
|
||||||
save_v86_state((struct kernel_vm86_regs *) regs, VM86_SIGNAL);
|
save_v86_state((struct kernel_vm86_regs *) regs, VM86_SIGNAL);
|
||||||
|
|
||||||
/* Are we from a system call? */
|
/* 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.. */
|
/* If so, check system call restarting.. */
|
||||||
switch (syscall_get_error(current, regs)) {
|
switch (syscall_get_error(current, regs)) {
|
||||||
case -ERESTART_RESTARTBLOCK:
|
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? */
|
/* 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 */
|
/* Restart the system call - no handlers present */
|
||||||
switch (syscall_get_error(current, regs)) {
|
switch (syscall_get_error(current, regs)) {
|
||||||
case -ERESTARTNOHAND:
|
case -ERESTARTNOHAND:
|
||||||
|
|
Loading…
Reference in a new issue