diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2013-09-27 09:24:38 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-10-13 19:08:34 -0400 |
commit | 98e00cd81b76f8b50b881bf3ac532fa1ab42931c (patch) | |
tree | 971ff61e21c10d7c7526c97f11a0f5f83bd7ddbd | |
parent | bc30c3576d85f7d02f5620cbe8d03f4064c6a73a (diff) |
s390: fix system call restart after inferior call
commit dbbfe487e5f3fc00c9fe5207d63309859704d12f upstream.
Git commit 616498813b11ffef "s390: system call path micro optimization"
introduced a regression in regard to system call restarting and inferior
function calls via the ptrace interface. The pointer to the system call
table needs to be loaded in sysc_sigpending if do_signal returns with
TIF_SYSCALl set after it restored a system call context.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | arch/s390/kernel/entry.S | 1 | ||||
-rw-r--r-- | arch/s390/kernel/entry64.S | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S index 4d5e6f8a7978..32bb7bf29397 100644 --- a/arch/s390/kernel/entry.S +++ b/arch/s390/kernel/entry.S | |||
@@ -265,6 +265,7 @@ sysc_sigpending: | |||
265 | tm __TI_flags+3(%r12),_TIF_SYSCALL | 265 | tm __TI_flags+3(%r12),_TIF_SYSCALL |
266 | jno sysc_return | 266 | jno sysc_return |
267 | lm %r2,%r7,__PT_R2(%r11) # load svc arguments | 267 | lm %r2,%r7,__PT_R2(%r11) # load svc arguments |
268 | l %r10,__TI_sysc_table(%r12) # 31 bit system call table | ||
268 | xr %r8,%r8 # svc 0 returns -ENOSYS | 269 | xr %r8,%r8 # svc 0 returns -ENOSYS |
269 | clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2) | 270 | clc __PT_INT_CODE+2(2,%r11),BASED(.Lnr_syscalls+2) |
270 | jnl sysc_nr_ok # invalid svc number -> do svc 0 | 271 | jnl sysc_nr_ok # invalid svc number -> do svc 0 |
diff --git a/arch/s390/kernel/entry64.S b/arch/s390/kernel/entry64.S index 4c17eece707e..2e3befddecee 100644 --- a/arch/s390/kernel/entry64.S +++ b/arch/s390/kernel/entry64.S | |||
@@ -293,6 +293,7 @@ sysc_sigpending: | |||
293 | tm __TI_flags+7(%r12),_TIF_SYSCALL | 293 | tm __TI_flags+7(%r12),_TIF_SYSCALL |
294 | jno sysc_return | 294 | jno sysc_return |
295 | lmg %r2,%r7,__PT_R2(%r11) # load svc arguments | 295 | lmg %r2,%r7,__PT_R2(%r11) # load svc arguments |
296 | lg %r10,__TI_sysc_table(%r12) # address of system call table | ||
296 | lghi %r8,0 # svc 0 returns -ENOSYS | 297 | lghi %r8,0 # svc 0 returns -ENOSYS |
297 | llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number | 298 | llgh %r1,__PT_INT_CODE+2(%r11) # load new svc number |
298 | cghi %r1,NR_syscalls | 299 | cghi %r1,NR_syscalls |