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 += -Wno-unused-parameter -Wno-unused-variable
|
||||||
CFLAGS += -Ilibssh/include/ -Imsgpack/src
|
CFLAGS += -Ilibssh/include/ -Imsgpack/src
|
||||||
|
CFLAGS += -rdynamic # for stack traces
|
||||||
|
|
||||||
if IS_DEVENV
|
if IS_DEVENV
|
||||||
CFLAGS += -DDEVENV
|
CFLAGS += -DDEVENV
|
||||||
|
@ -73,3 +73,9 @@ void tmate_print_trace(void)
|
|||||||
|
|
||||||
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))
|
(mkdir(TMATE_WORKDIR "/jail", 0700) < 0 && errno != EEXIST))
|
||||||
tmate_fatal("Cannot prepare session in " TMATE_WORKDIR);
|
tmate_fatal("Cannot prepare session in " TMATE_WORKDIR);
|
||||||
|
|
||||||
|
tmate_preload_trace_lib();
|
||||||
|
|
||||||
tmate_ssh_server_main(port);
|
tmate_ssh_server_main(port);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -189,11 +189,18 @@ static void handle_sigalrm(void)
|
|||||||
tmate_fatal("Connection grace period (%d) passed", SSH_GRACE_PERIOD);
|
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)
|
static void signal_handler(int sig)
|
||||||
{
|
{
|
||||||
switch (sig) {
|
switch (sig) {
|
||||||
case SIGCHLD: handle_sigchld(); break;
|
case SIGCHLD: handle_sigchld(); break;
|
||||||
case SIGALRM: handle_sigalrm(); 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(SIGCHLD, signal_handler);
|
||||||
signal(SIGALRM, signal_handler);
|
signal(SIGALRM, signal_handler);
|
||||||
|
signal(SIGSEGV, signal_handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ssh_log_cb(ssh_session session, int priority,
|
static void ssh_log_cb(ssh_session session, int priority,
|
||||||
|
1
tmate.h
1
tmate.h
@ -137,6 +137,7 @@ extern const char *tmate_session_token;
|
|||||||
extern void tmate_spawn_slave(struct tmate_ssh_client *client);
|
extern void tmate_spawn_slave(struct tmate_ssh_client *client);
|
||||||
|
|
||||||
/* tmate-debug.c */
|
/* tmate-debug.c */
|
||||||
|
extern void tmate_preload_trace_lib(void);
|
||||||
extern void tmate_print_trace(void);
|
extern void tmate_print_trace(void);
|
||||||
|
|
||||||
/* tmux-bare.c */
|
/* tmux-bare.c */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user