This is the PPC64 counterpart of the fix for the potential race in the
syscall restart code that has gone into other architectures. It resets
current_thread_info()->restart_block.fn to do_no_syscall_restart in
the sigreturn code.
sigset_t set;
stack_t st;
+ /* Always make any pending restarted system calls return -EINTR */
+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
if (verify_area(VERIFY_READ, uc, sizeof(*uc)))
goto badframe;
{
switch ((int)regs->result) {
case -ERESTART_RESTARTBLOCK:
- current_thread_info()->restart_block.fn = do_no_restart_syscall;
- /* fallthrough */
case -ERESTARTNOHAND:
/* ERESTARTNOHAND means that the syscall should only be
* restarted if there was no handler for the signal, and since
struct sigcontext32 *sc = (struct sigcontext32 *)(u64)newsp;
int i;
+ /* Always make any pending restarted system calls return -EINTR */
+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
if (verify_area(VERIFY_WRITE, frame, sizeof(*frame)))
goto badframe;
if (regs->msr & MSR_FP)
int i;
mm_segment_t old_fs;
+ /* Always make any pending restarted system calls return -EINTR */
+ current_thread_info()->restart_block.fn = do_no_restart_syscall;
+
/* Adjust the inputted reg1 to point to the first rt signal frame */
rt_sf = (struct rt_sigframe_32 *)(regs->gpr[1] + __SIGNAL_FRAMESIZE32);
/* Copy the information from the user stack */