• Paul Eggert's avatar
    Fix a malloc race condition involving strsignal. · aa1ba90e
    Paul Eggert authored
    A signal can arrive in the middle of a malloc, and Emacs's signal
    handler can invoke strsignal, which can invoke malloc, which is
    not portable.  This race condition bug makes Emacs hang on GNU/Linux.
    Fix it by altering the signal handler so that it does not invoke
    strsignal.
    * emacs.c (shut_down_emacs): Use safe_strsignal, not strsignal.
    * process.c (status_message): Use const pointer, in case strsignal
    is #defined to safe_strsignal.
    * sysdep.c (sys_siglist, init_signals): Always define and
    initialize a substitute sys_siglist if the system does not define
    one, even if HAVE_STRSIGNAL.
    (safe_strsignal): Rename from strsignal.  Always define,
    using sys_siglist.  Return a const pointer.
    * syssignal.h (safe_strsignal): New decl.
    (strsignal) [!HAVE_STRSIGNAL]: Define in terms of safe_strsignal.
    aa1ba90e
emacs.c 69.9 KB