linux-hardened/arch/cris/kernel
Rabin Vincent 9a7449d3e9 CRISv32: handle multiple signals
Al Viro noted that CRIS fails to handle multiple signals.

This fixes the problem for CRISv32 by making it use a C work_pending
handling loop similar to the ARM implementation in 0a267fa6a1
("ARM: 7472/1: pull all work_pending logics into C function").

This also happens to fixes the warnings which currently trigger on
CRISv32 due to do_signal() being called with interrupts disabled.

Test case (should die of the SIGSEGV which gets raised when setting up
the stack for SIGALRM, but instead reaches and executes the _exit(1)):

  #include <unistd.h>
  #include <signal.h>
  #include <sys/time.h>
  #include <err.h>

  static void handler(int sig) { }

  int main(int argc, char *argv[])
  {
  	int ret;
  	struct itimerval t1 = { .it_value = {1} };
  	stack_t ss = {
  		.ss_sp = NULL,
  		.ss_size = SIGSTKSZ,
  	};
  	struct sigaction action = {
  		.sa_handler = handler,
  		.sa_flags = SA_ONSTACK,
  	};

  	ret = sigaltstack(&ss, NULL);
  	if (ret < 0)
  		err(1, "sigaltstack");

  	sigaction(SIGALRM, &action, NULL);
   	setitimer(ITIMER_REAL, &t1, NULL);

  	pause();

  	_exit(1);

  	return 0;
  }

Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
Link: http://lkml.kernel.org/r/20121208074429.GC4939@ZenIV.linux.org.uk
Signed-off-by: Rabin Vincent <rabin@rab.in>
Signed-off-by: Jesper Nilsson <jespern@axis.com>
2015-03-25 10:53:54 +01:00
..
asm-offsets.c CRIS: use kbuild.h instead of defining macros in asm-offset.c 2012-12-20 12:45:40 +01:00
crisksyms.c CRIS: Export csum_partial_copy_nocheck 2015-01-29 10:10:08 +01:00
devicetree.c CRISv32: add device tree support 2015-03-25 09:49:48 +01:00
irq.c cris: remove deprecated IRQF_DISABLED 2014-01-08 16:10:18 +01:00
Makefile CRISv32: add device tree support 2015-03-25 09:49:48 +01:00
module.c module: remove mod arg from module_free, rename module_memfree(). 2015-01-20 11:38:33 +10:30
process.c cris: Use generic idle loop 2013-04-08 17:39:25 +02:00
profile.c proc: Use PDE attribute setting accessor functions 2013-05-07 15:01:11 -04:00
ptrace.c CRISv32: handle multiple signals 2015-03-25 10:53:54 +01:00
setup.c CRISv32: add device tree support 2015-03-25 09:49:48 +01:00
sys_cris.c Add generic sys_ipc wrapper 2010-03-12 15:52:32 -08:00
time.c time: convert arch_gettimeoffset to a pointer 2012-12-24 09:36:07 -07:00
traps.c CRIS: Use KALLSYMs if available in call stack dump 2014-12-20 00:05:36 +01:00
vmlinux.lds.S CRIS: Add _sdata to vmlinux.lds.S 2012-04-03 13:26:33 +02:00