aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2013-09-27 09:24:38 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-13 19:08:34 -0400
commit98e00cd81b76f8b50b881bf3ac532fa1ab42931c (patch)
tree971ff61e21c10d7c7526c97f11a0f5f83bd7ddbd
parentbc30c3576d85f7d02f5620cbe8d03f4064c6a73a (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.S1
-rw-r--r--arch/s390/kernel/entry64.S1
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