try_to_freeze() called with IRQs disabled on ARM
Russell King - ARM Linux
linux at arm.linux.org.uk
Fri Sep 2 13:22:59 EDT 2011
On Fri, Sep 02, 2011 at 04:47:35PM +0200, Ulrich Weigand wrote:
> Assume the scenario you initally describe, where a first signal is
> ignored and leads to system call restart. With your latest patch,
> you call into syscall_restart which sets everything up to restart
> the call (with interrupts disabled).
I don't think SIG_IGN signals even set the TIF work flag, so they
never even cause a call into do_signal(). Therefore, as far as
syscalls go, attempting to send a process (eg) a SIGINT which its
handler is set to SIG_IGN results in the process not even being
notified about the attempt - we won't even wake up while the
syscall is sleeping.
> To really fix this case would probably require some way for the
> debugger to save and restore the restore_block saved state. This
> is not quite trivial, since it would expose that state to user space,
> effectively creating a new ABI (and probably requiring sanity checks
> to ensure a valid state is restored). This probably cannot be fixed
> by one architecture for itself, but would need support from common
> kernel code.
Such state would have to be crytographically signed or kept entirely
within the kernel, as it would otherwise mean that you could redirect
the kernel PC to anywhere...
More information about the linux-arm-kernel