linux/arch/s390/include/asm
Martin Schwidefsky 20b40a794b [S390] signal race with restarting system calls
For a ERESTARTNOHAND/ERESTARTSYS/ERESTARTNOINTR restarting system call
do_signal will prepare the restart of the system call with a rewind of
the PSW before calling get_signal_to_deliver (where the debugger might
take control). For A ERESTART_RESTARTBLOCK restarting system call
do_signal will set -EINTR as return code.
There are two issues with this approach:
1) strace never sees ERESTARTNOHAND, ERESTARTSYS, ERESTARTNOINTR or
   ERESTART_RESTARTBLOCK as the rewinding already took place or the
   return code has been changed to -EINTR
2) if get_signal_to_deliver does not return with a signal to deliver
   the restart via the repeat of the svc instruction is left in place.
   This opens a race if another signal is made pending before the
   system call instruction can be reexecuted. The original system call
   will be restarted even if the second signal would have ended the
   system call with -EINTR.

These two issues can be solved by dropping the early rewind of the
system call before get_signal_to_deliver has been called and by using
the TIF_RESTART_SVC magic to do the restart if no signal has to be
delivered. The only situation where the system call restart via the
repeat of the svc instruction is appropriate is when a SA_RESTART
signal is delivered to user space.

Unfortunately this breaks inferior calls by the debugger again. The
system call number and the length of the system call instruction is
lost over the inferior call and user space will see ERESTARTNOHAND/
ERESTARTSYS/ERESTARTNOINTR/ERESTART_RESTARTBLOCK. To correct this a
new ptrace interface is added to save/restore the system call number
and system call instruction length.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2011-10-30 15:16:43 +01:00
..
airq.h
appldata.h
asm-offsets.h kbuild: move asm-offsets.h to include/generated 2009-12-12 13:08:14 +01:00
atomic.h atomic: cleanup asm-generic atomic*.h inclusion 2011-07-26 16:49:47 -07:00
auxvec.h
bitops.h asm-generic: add another generic ext2 atomic bitops 2011-07-26 16:49:46 -07:00
bitsperlong.h asm-generic: introduce asm/bitsperlong.h 2009-06-11 21:02:14 +02:00
bug.h panic: Allow warnings to set different taint flags 2010-05-19 08:36:48 +01:00
bugs.h
byteorder.h
cache.h [S390] net: provide architecture specific NET_SKB_PAD 2011-02-17 13:13:59 +01:00
cacheflush.h module: undo module RONX protection correctly. 2011-05-19 16:55:26 +09:30
ccwdev.h [S390] fix mismatch in summation of I/O IRQ statistics 2011-10-30 15:16:15 +01:00
ccwgroup.h [S390] ccwgroup_driver: remove duplicate members 2011-03-23 10:15:59 +01:00
checksum.h [S390] convert/optimize csum_fold() to C 2009-09-11 10:29:43 +02:00
chpid.h
chsc.h [S390] cio: move scsw helper functions to header file 2009-09-11 10:29:36 +02:00
cio.h Fix common misspellings 2011-03-31 11:26:23 -03:00
cmb.h
cmpxchg.h [S390] percpu: implement arch specific irqsafe_cpu_ops 2011-05-23 10:24:29 +02:00
compat.h compat: sync compat_stats with statfs. 2011-10-28 14:58:53 +02:00
cpcmd.h
cpu.h [S390] correct alignment of cpuid structure 2010-10-25 16:10:19 +02:00
cputime.h [S390] nohz: optimize arch_needs_cpu() 2011-01-05 12:47:28 +01:00
crw.h [S390] cio: wait for channel report 2010-02-26 22:37:29 +01:00
current.h
dasd.h [S390] dasd: Add support for raw ECKD access. 2011-01-05 12:47:30 +01:00
debug.h [S390] s390dbf: Add description for usage of "%s" in sprintf events 2009-09-11 10:29:53 +02:00
delay.h [S390] delay: implement ndelay 2011-05-26 09:48:25 +02:00
device.h
diag.h [S390] replace diag10() with diag10_range() function 2011-05-10 17:13:43 +02:00
div64.h
dma.h
ebcdic.h
elf.h [S390] Do not clobber personality flags on exec 2011-09-26 16:40:50 +02:00
emergency-restart.h
errno.h
etr.h [S390] use inline assembly contraints available with gcc 3.3.3 2010-02-26 22:37:30 +01:00
extmem.h
fb.h
fcntl.h
fcx.h
ftrace.h ftrace/s390: mcount offset calculation 2011-05-16 15:05:06 -04:00
futex.h futex: Sanitize futex ops argument types 2011-03-11 12:23:31 +01:00
hardirq.h [S390] time: move local_tick_enable()/disable() to timex.h 2011-01-05 12:47:24 +01:00
hugetlb.h [S390] Remove data execution protection 2011-05-23 10:24:28 +02:00
idals.h
io.h
ioctl.h
ioctls.h ioctl: Use asm-generic/ioctls.h on s390 (enables termiox) 2010-10-22 10:20:01 -07:00
ipcbuf.h
ipl.h [S390] kdump backend code 2011-10-30 15:16:42 +01:00
irq_regs.h
irq.h [S390] fix mismatch in summation of I/O IRQ statistics 2011-10-30 15:16:15 +01:00
irqflags.h [S390] irqs: Do not trace arch_local_{*,irq_*} functions 2011-07-24 10:48:00 +02:00
isc.h
itcw.h
jump_label.h jump label: Add s390 support 2011-04-04 13:43:16 -04:00
Kbuild KVM: S390: Export kvm_virtio.h 2010-10-24 10:51:30 +02:00
kdebug.h
kexec.h [S390] Add architecture code for unmapping crashkernel memory 2011-10-30 15:16:42 +01:00
kmap_types.h kmap_types: make most arches use generic header file 2009-06-16 19:47:51 -07:00
kprobes.h [S390] kprobes: jprobe save and restore 2011-01-05 12:47:24 +01:00
kvm_host.h [S390] kvm: make sigp emerg smp capable 2011-07-24 10:48:22 +02:00
kvm_para.h KVM: Add __KERNEL__ guards to exported headers 2009-09-10 10:46:48 +03:00
kvm_virtio.h KVM: S390: Add virtio hotplug add support 2010-10-24 10:51:29 +02:00
kvm.h KVM: s390: Make psw available on all exits, not just a subset 2009-12-03 09:32:25 +02:00
linkage.h [S390] fix s390 assembler code alignments 2011-07-24 10:48:21 +02:00
local64.h arch: Implement local64_t 2010-06-09 11:12:36 +02:00
local.h
lowcore.h [S390] lowcore cleanup 2011-10-30 15:16:42 +01:00
mathemu.h
mman.h mm: remove duplicate asm/mman.h files 2009-09-22 07:17:42 -07:00
mmu_context.h [S390] Remove data execution protection 2011-05-23 10:24:28 +02:00
mmu.h [S390] kvm guest address space mapping 2011-07-24 10:48:21 +02:00
module.h
monwriter.h
msgbuf.h
mutex.h [S390] mutex: Introduce arch_mutex_cpu_relax() 2011-01-05 12:47:31 +01:00
nmi.h
page.h [S390] refactor page table functions for better pgste support 2011-05-23 10:24:31 +02:00
param.h [S390] Have param.h simply include <asm-generic/param.h>. 2010-01-04 09:05:58 +01:00
pci.h
percpu.h [S390] percpu: implement arch specific irqsafe_cpu_ops 2011-05-23 10:24:29 +02:00
perf_event.h irq_work: Add generic hardirq context callbacks 2010-10-18 19:58:50 +02:00
pgalloc.h [S390] kvm guest address space mapping 2011-07-24 10:48:21 +02:00
pgtable.h [S390] kvm: fix address mode switching 2011-09-20 17:07:34 +02:00
poll.h
posix_types.h
processor.h [S390] exec: remove redundant set_fs(USER_DS) 2011-08-03 16:44:20 +02:00
ptrace.h [S390] signal race with restarting system calls 2011-10-30 15:16:43 +01:00
qdio.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2011-10-28 16:44:18 -07:00
qeth.h qeth: support ipv6 query arp cache for HiperSockets 2010-12-10 14:28:47 -08:00
reset.h [S390] kdump backend code 2011-10-30 15:16:42 +01:00
resource.h
rwsem.h rwsem: Move duplicate function prototypes to linux/rwsem.h 2011-01-27 12:30:39 +01:00
scatterlist.h [S390] set ARCH_HAS_SG_CHAIN for s390 2010-10-25 16:10:15 +02:00
schid.h
sclp.h
scsw.h [S390] cio: move scsw helper functions to header file 2009-09-11 10:29:36 +02:00
seccomp.h [S390] secure computing arch backend 2009-06-12 10:27:31 +02:00
sections.h
segment.h
sembuf.h
setup.h [S390] kdump backend code 2011-10-30 15:16:42 +01:00
sfp-machine.h
sfp-util.h Revert "endian: #define __BYTE_ORDER" 2010-05-26 08:30:15 -07:00
shmbuf.h
shmparam.h
sigcontext.h
siginfo.h
signal.h asm-generic: rename termios.h, signal.h and mman.h 2009-06-11 21:01:52 +02:00
sigp.h [S390] spinlock: check virtual cpu running status 2010-02-26 22:37:31 +01:00
smp.h [S390] Force PSW restart on online CPU 2011-10-30 15:16:41 +01:00
socket.h net: Generalize socket rx gap / receive queue overflow cmsg 2009-10-12 13:26:31 -07:00
sockios.h [S390] use generic sockios.h header file 2009-12-07 12:51:37 +01:00
sparsemem.h
spinlock_types.h locking: Convert raw_rwlock to arch_rwlock 2009-12-14 23:55:32 +01:00
spinlock.h [S390] use inline assembly contraints available with gcc 3.3.3 2010-02-26 22:37:30 +01:00
stat.h
statfs.h add f_flags to struct statfs(64) 2010-08-09 16:48:44 -04:00
string.h
swab.h [S390] use inline assembly contraints available with gcc 3.3.3 2010-02-26 22:37:30 +01:00
syscall.h [S390] signal race with restarting system calls 2011-10-30 15:16:43 +01:00
sysinfo.h [S390] topology: move topology sysinfo code 2010-10-25 16:10:21 +02:00
system.h [S390] Add real memory access functions 2011-10-30 15:16:42 +01:00
tape390.h
termbits.h [S390] use generic termbits.h header file 2009-12-07 12:51:37 +01:00
termios.h asm-generic: rename termios.h, signal.h and mman.h 2009-06-11 21:01:52 +02:00
thread_info.h [S390] signal race with restarting system calls 2011-10-30 15:16:43 +01:00
timer.h [S390] extend virtual timer interface by mod_virt_timer_periodic 2009-04-14 15:37:23 +02:00
timex.h [S390] time: let local_tick_enable/disable() reprogram the clock comparator 2011-01-05 12:47:25 +01:00
tlb.h [S390] use generic RCU page-table freeing code 2011-06-06 14:14:56 +02:00
tlbflush.h [S390] kvm guest address space mapping 2011-07-24 10:48:21 +02:00
topology.h [S390] topology,sched: fix cpu_coregroup_mask/cpu_book_mask definitions 2011-05-26 09:48:25 +02:00
types.h remove dma64_addr_t 2011-03-23 19:47:18 -07:00
uaccess.h [S390] uaccess: turn __access_ok() into a define 2011-05-26 09:48:25 +02:00
ucontext.h [S390] 64-bit register support for 31-bit processes 2009-10-06 10:35:10 +02:00
unaligned.h
unistd.h ns: Wire up the setns system call 2011-05-28 10:48:39 -07:00
user.h
vdso.h [S390] vdso: use ntp adjusted clock multiplier 2010-04-22 17:17:19 +02:00
vtoc.h
xor.h
zcrypt.h