diff --git a/cpukit/posix/src/signal_2.c b/cpukit/posix/src/signal_2.c index a88779624e..081362a496 100644 --- a/cpukit/posix/src/signal_2.c +++ b/cpukit/posix/src/signal_2.c @@ -74,6 +74,8 @@ sighandler_t signal( s.sa_flags = 0; #endif - sigaction( signum, &s, &old ); + if ( sigaction( signum, &s, &old ) < 0 ) + return (SIG_ERR); + return (sighandler_t) old.sa_handler; } diff --git a/testsuites/psxtests/psxsignal01/init.c b/testsuites/psxtests/psxsignal01/init.c index 9cd3e31112..49235686e7 100644 --- a/testsuites/psxtests/psxsignal01/init.c +++ b/testsuites/psxtests/psxsignal01/init.c @@ -139,6 +139,11 @@ void *POSIX_Init( TEST_BEGIN(); + /* invalid signum return SIG_ERR */ + sighandler_t old_handler = signal( 0, SIG_DFL ); + rtems_test_assert( old_handler == SIG_ERR ); + rtems_test_assert( errno == EINVAL ); + block_all_signals(); /* set the time of day, and print our buffer in multiple ways */