PyOS_getsig(), PyOS_setsig(): The minimal amount of work to avoid the

uninitialized memory reads reported in bug #478001.

Note that this doesn't address the following larger issues:

- Error conditions are not documented for PyOS_*sig() in the C API.

- Nothing that actually calls PyOS_*sig() in the core interpreter and
  extension modules actually /checks/ the return value of the call.

Fixing those is left as an exercise for a later day.
This commit is contained in:
Barry Warsaw 2001-11-13 23:08:26 +00:00
parent 79b5b5b7fb
commit afeb2a4d89
1 changed files with 12 additions and 0 deletions

View File

@ -1437,6 +1437,12 @@ PyOS_getsig(int sig)
{ {
#ifdef HAVE_SIGACTION #ifdef HAVE_SIGACTION
struct sigaction context; struct sigaction context;
/* Initialize context.sa_handler to SIG_ERR which makes about as
* much sense as anything else. It should get overwritten if
* sigaction actually succeeds and otherwise we avoid an
* uninitialized memory read.
*/
context.sa_handler = SIG_ERR;
sigaction(sig, NULL, &context); sigaction(sig, NULL, &context);
return context.sa_handler; return context.sa_handler;
#else #else
@ -1453,6 +1459,12 @@ PyOS_setsig(int sig, PyOS_sighandler_t handler)
#ifdef HAVE_SIGACTION #ifdef HAVE_SIGACTION
struct sigaction context; struct sigaction context;
PyOS_sighandler_t oldhandler; PyOS_sighandler_t oldhandler;
/* Initialize context.sa_handler to SIG_ERR which makes about as
* much sense as anything else. It should get overwritten if
* sigaction actually succeeds and otherwise we avoid an
* uninitialized memory read.
*/
context.sa_handler = SIG_ERR;
sigaction(sig, NULL, &context); sigaction(sig, NULL, &context);
oldhandler = context.sa_handler; oldhandler = context.sa_handler;
context.sa_handler = handler; context.sa_handler = handler;