1
0
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:
Nicolas Viennot 2013-06-13 05:53:43 -04:00
parent bc72493b91
commit 04dfad47a8
5 changed files with 21 additions and 3 deletions

View File

@ -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

View File

@ -73,3 +73,9 @@ void tmate_print_trace(void)
free(strings);
}
void tmate_preload_trace_lib(void)
{
void *array[0];
backtrace(array, 0);
}

View File

@ -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;
}

View File

@ -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,

View File

@ -137,6 +137,7 @@ extern const char *tmate_session_token;
extern void tmate_spawn_slave(struct tmate_ssh_client *client);
/* tmate-debug.c */
extern void tmate_preload_trace_lib(void);
extern void tmate_print_trace(void);
/* tmux-bare.c */