linux/arch/cris/arch-v32/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
..
cache.c
cacheflush.S
crisksyms.c
debugport.c CRISv32: Implement early console 2014-12-20 00:05:49 +01:00
entry.S CRISv32: handle multiple signals 2015-03-25 10:53:54 +01:00
fasttimer.c cris: remove deprecated IRQF_DISABLED 2014-01-08 16:10:18 +01:00
head.S CRIS: Remove VCS simulator specific code 2012-10-03 09:57:01 +02:00
irq.c CRISv32: add irq domains support 2015-03-25 09:47:43 +01:00
kgdb_asm.S
kgdb.c CRIS: Remove VCS simulator specific code 2012-10-03 09:57:01 +02:00
Makefile
process.c dump_stack: unify debug information printed by show_regs() 2013-04-30 17:04:02 -07:00
ptrace.c cris:removed the unused variable 2012-04-03 13:09:18 +02:00
setup.c
signal.c CRISv32: prevent bogus restarts on sigreturn 2015-03-25 10:51:53 +01:00
smp.c cris: remove deprecated IRQF_DISABLED 2014-01-08 16:10:18 +01:00
time.c CRISv32: Avoid warning of unused variable 2015-01-29 10:10:08 +01:00
traps.c