Remove use of setjmp/longjmp in the sudoers plugin. We no longer

call fatal() except in the malloc wrappers and due to libsudo_util
there is now a single copy of fatal/fatalx.
This commit is contained in:
Todd C. Miller
2014-06-26 15:51:15 -06:00
parent 088edcb6f5
commit 2166a6afe1
6 changed files with 7 additions and 104 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2004-2005, 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com>
* Copyright (c) 2004-2005, 2010-2014 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -43,8 +43,6 @@ struct sudo_fatal_callback {
};
SLIST_HEAD(sudo_fatal_callback_list, sudo_fatal_callback);
__dso_public sigjmp_buf fatal_jmp;
static bool setjmp_enabled = false;
static struct sudo_fatal_callback_list callbacks;
static void _warning(int, const char *, va_list);
@@ -71,10 +69,7 @@ fatal_nodebug(const char *fmt, ...)
_warning(1, fmt, ap);
va_end(ap);
do_cleanup();
if (setjmp_enabled)
siglongjmp(fatal_jmp, 1);
else
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
void
@@ -86,10 +81,7 @@ fatalx_nodebug(const char *fmt, ...)
_warning(0, fmt, ap);
va_end(ap);
do_cleanup();
if (setjmp_enabled)
siglongjmp(fatal_jmp, 1);
else
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
void
@@ -97,10 +89,7 @@ vfatal_nodebug(const char *fmt, va_list ap)
{
_warning(1, fmt, ap);
do_cleanup();
if (setjmp_enabled)
siglongjmp(fatal_jmp, 1);
else
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
void
@@ -108,10 +97,7 @@ vfatalx_nodebug(const char *fmt, va_list ap)
{
_warning(0, fmt, ap);
do_cleanup();
if (setjmp_enabled)
siglongjmp(fatal_jmp, 1);
else
exit(EXIT_FAILURE);
exit(EXIT_FAILURE);
}
void
@@ -214,15 +200,3 @@ fatal_callback_deregister(void (*func)(void))
return -1;
}
void
fatal_disable_setjmp(void)
{
setjmp_enabled = false;
}
void
fatal_enable_setjmp(void)
{
setjmp_enabled = true;
}