mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Remove abort handler from the backtrace generator
The abort handler masks the exit status of the backtrace generator by capturing the abort signal from the backtrace handler and exiting with zero. Because the output of the backtrace generator is meant to be piped to `bt_test.py`, its exit status is unimportant and is currently ignored. The abort handler calls `exit(3)` which is not asynchronous-signal-safe and calling it in this context is undefined behavior [0]. Closes ticket 21026. [0] https://www.securecoding.cert.org/confluence/x/34At
This commit is contained in:
parent
d3c0b137af
commit
04f21f0322
3
changes/ticket21026
Normal file
3
changes/ticket21026
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
o Minor bugfixes (testing):
|
||||||
|
- Remove undefined behavior from the backtrace generator by removing
|
||||||
|
its signal handler. Fixes bug 21026; bugfix on 0.2.5.2-alpha.
|
@ -19,14 +19,12 @@ static int crashtype = 0;
|
|||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define NOINLINE __attribute__((noinline))
|
#define NOINLINE __attribute__((noinline))
|
||||||
#define NORETURN __attribute__((noreturn))
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int crash(int x) NOINLINE;
|
int crash(int x) NOINLINE;
|
||||||
int oh_what(int x) NOINLINE;
|
int oh_what(int x) NOINLINE;
|
||||||
int a_tangled_web(int x) NOINLINE;
|
int a_tangled_web(int x) NOINLINE;
|
||||||
int we_weave(int x) NOINLINE;
|
int we_weave(int x) NOINLINE;
|
||||||
static void abort_handler(int s) NORETURN;
|
|
||||||
|
|
||||||
#ifdef HAVE_CFLAG_WNULL_DEREFERENCE
|
#ifdef HAVE_CFLAG_WNULL_DEREFERENCE
|
||||||
DISABLE_GCC_WARNING(null-dereference)
|
DISABLE_GCC_WARNING(null-dereference)
|
||||||
@ -76,13 +74,6 @@ we_weave(int x)
|
|||||||
return a_tangled_web(x) + a_tangled_web(x+1);
|
return a_tangled_web(x) + a_tangled_web(x+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
abort_handler(int s)
|
|
||||||
{
|
|
||||||
(void)s;
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -120,8 +111,6 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
configure_backtrace_handler(NULL);
|
configure_backtrace_handler(NULL);
|
||||||
|
|
||||||
signal(SIGABRT, abort_handler);
|
|
||||||
|
|
||||||
printf("%d\n", we_weave(2));
|
printf("%d\n", we_weave(2));
|
||||||
|
|
||||||
clean_up_backtrace_handler();
|
clean_up_backtrace_handler();
|
||||||
|
Loading…
Reference in New Issue
Block a user