mirror of
https://github.com/tmate-io/tmate-ssh-server.git
synced 2020-11-18 19:53:51 -08:00
Server logs stack trace on SIGSEGV
This commit is contained in:
parent
bc72493b91
commit
04dfad47a8
@ -23,6 +23,7 @@ endif
|
||||
|
||||
CFLAGS += -Wno-unused-parameter -Wno-unused-variable
|
||||
CFLAGS += -Ilibssh/include/ -Imsgpack/src
|
||||
CFLAGS += -rdynamic # for stack traces
|
||||
|
||||
if IS_DEVENV
|
||||
CFLAGS += -DDEVENV
|
||||
|
@ -59,8 +59,8 @@ void tmate_print_trace(void)
|
||||
char **strings;
|
||||
size_t i;
|
||||
|
||||
size = backtrace (array, 20);
|
||||
strings = backtrace_symbols (array, size);
|
||||
size = backtrace(array, 20);
|
||||
strings = backtrace_symbols(array, size);
|
||||
|
||||
tmate_info("============ %zd stack frames ============", size);
|
||||
|
||||
@ -71,5 +71,11 @@ void tmate_print_trace(void)
|
||||
tmate_info("%s", strings[i]);
|
||||
}
|
||||
|
||||
free (strings);
|
||||
free(strings);
|
||||
}
|
||||
|
||||
void tmate_preload_trace_lib(void)
|
||||
{
|
||||
void *array[0];
|
||||
backtrace(array, 0);
|
||||
}
|
||||
|
@ -61,6 +61,8 @@ int main(int argc, char **argv)
|
||||
(mkdir(TMATE_WORKDIR "/jail", 0700) < 0 && errno != EEXIST))
|
||||
tmate_fatal("Cannot prepare session in " TMATE_WORKDIR);
|
||||
|
||||
tmate_preload_trace_lib();
|
||||
|
||||
tmate_ssh_server_main(port);
|
||||
return 0;
|
||||
}
|
||||
|
@ -189,11 +189,18 @@ static void handle_sigalrm(void)
|
||||
tmate_fatal("Connection grace period (%d) passed", SSH_GRACE_PERIOD);
|
||||
}
|
||||
|
||||
static void handle_sigsegv(void)
|
||||
{
|
||||
tmate_print_trace();
|
||||
tmate_fatal("CRASH");
|
||||
}
|
||||
|
||||
static void signal_handler(int sig)
|
||||
{
|
||||
switch (sig) {
|
||||
case SIGCHLD: handle_sigchld(); break;
|
||||
case SIGALRM: handle_sigalrm(); break;
|
||||
case SIGSEGV: handle_sigsegv(); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -201,6 +208,7 @@ static void setup_signals(void)
|
||||
{
|
||||
signal(SIGCHLD, signal_handler);
|
||||
signal(SIGALRM, signal_handler);
|
||||
signal(SIGSEGV, signal_handler);
|
||||
}
|
||||
|
||||
static void ssh_log_cb(ssh_session session, int priority,
|
||||
|
Loading…
x
Reference in New Issue
Block a user