util: Implement utilSigName()
This commit is contained in:
parent
40a472a77e
commit
fa2796fe65
2
Makefile
2
Makefile
@ -136,7 +136,7 @@ indent:
|
|||||||
|
|
||||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
nsjail.o: nsjail.h common.h cmdline.h log.h net.h subproc.h
|
nsjail.o: nsjail.h common.h cmdline.h log.h net.h subproc.h util.h
|
||||||
cmdline.o: cmdline.h common.h config.h log.h mount.h util.h user.h
|
cmdline.o: cmdline.h common.h config.h log.h mount.h util.h user.h
|
||||||
config.o: common.h config.h log.h mount.h user.h util.h
|
config.o: common.h config.h log.h mount.h user.h util.h
|
||||||
contain.o: contain.h common.h cgroup.h cpu.h log.h mount.h net.h pid.h user.h
|
contain.o: contain.h common.h cgroup.h cpu.h log.h mount.h net.h pid.h user.h
|
||||||
|
3
nsjail.c
3
nsjail.c
@ -34,6 +34,7 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "subproc.h"
|
#include "subproc.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
static __thread int nsjailSigFatal = 0;
|
static __thread int nsjailSigFatal = 0;
|
||||||
static __thread bool nsjailShowProc = false;
|
static __thread bool nsjailShowProc = false;
|
||||||
@ -55,7 +56,7 @@ static void nsjailSig(int sig)
|
|||||||
|
|
||||||
static bool nsjailSetSigHandler(int sig)
|
static bool nsjailSetSigHandler(int sig)
|
||||||
{
|
{
|
||||||
LOG_D("Setting sighandler for signal '%d' (%s)", sig, strsignal(sig));
|
LOG_D("Setting sighandler for signal %s (%d)", utilSigName(sig), sig);
|
||||||
|
|
||||||
sigset_t smask;
|
sigset_t smask;
|
||||||
sigemptyset(&smask);
|
sigemptyset(&smask);
|
||||||
|
28
subproc.c
28
subproc.c
@ -58,21 +58,6 @@ static const char subprocDoneChar = 'D';
|
|||||||
#define CLONE_NEWCGROUP 0x02000000
|
#define CLONE_NEWCGROUP 0x02000000
|
||||||
#endif /* !defined(CLONE_NEWCGROUP) */
|
#endif /* !defined(CLONE_NEWCGROUP) */
|
||||||
|
|
||||||
extern const char *sys_sigabbrev[];
|
|
||||||
|
|
||||||
static const char *subprocSigName(int signo)
|
|
||||||
{
|
|
||||||
static __thread char sigName[1024];
|
|
||||||
if (signo >= __SIGRTMIN && signo <= SIGRTMAX) {
|
|
||||||
snprintf(sigName, sizeof(sigName), "SIG%d=__RTMIN+%d", signo, signo - __SIGRTMIN);
|
|
||||||
} else if (signo >= 0 && signo <= SIGSYS) {
|
|
||||||
snprintf(sigName, sizeof(sigName), "SIG%s", sys_sigabbrev[signo]);
|
|
||||||
} else {
|
|
||||||
snprintf(sigName, sizeof(sigName), "UNKNOWN-%d", signo);
|
|
||||||
}
|
|
||||||
return sigName;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *subprocCloneFlagsToStr(uintptr_t flags)
|
static const char *subprocCloneFlagsToStr(uintptr_t flags)
|
||||||
{
|
{
|
||||||
static __thread char cloneFlagName[1024];
|
static __thread char cloneFlagName[1024];
|
||||||
@ -124,7 +109,7 @@ static const char *subprocCloneFlagsToStr(uintptr_t flags)
|
|||||||
utilSSnPrintf(cloneFlagName, sizeof(cloneFlagName), "%#tx|",
|
utilSSnPrintf(cloneFlagName, sizeof(cloneFlagName), "%#tx|",
|
||||||
flags & ~(knownFlagMask));
|
flags & ~(knownFlagMask));
|
||||||
}
|
}
|
||||||
utilSSnPrintf(cloneFlagName, sizeof(cloneFlagName), "%s", subprocSigName(flags & CSIGNAL));
|
utilSSnPrintf(cloneFlagName, sizeof(cloneFlagName), "%s", utilSigName(flags & CSIGNAL));
|
||||||
return cloneFlagName;
|
return cloneFlagName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,9 +306,10 @@ int subprocReap(struct nsjconf_t *nsjconf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (WIFSIGNALED(status)) {
|
if (WIFSIGNALED(status)) {
|
||||||
LOG_I("PID: %d (%s) terminated with signal: %d, (PIDs left: %d)",
|
LOG_I
|
||||||
si.si_pid, remote_txt, WTERMSIG(status),
|
("PID: %d (%s) terminated with signal: %s (%d), (PIDs left: %d)",
|
||||||
subprocCount(nsjconf) - 1);
|
si.si_pid, remote_txt, utilSigName(WTERMSIG(status)),
|
||||||
|
WTERMSIG(status), subprocCount(nsjconf) - 1);
|
||||||
subprocRemove(nsjconf, si.si_pid);
|
subprocRemove(nsjconf, si.si_pid);
|
||||||
rv = 100 + WTERMSIG(status);
|
rv = 100 + WTERMSIG(status);
|
||||||
}
|
}
|
||||||
@ -538,8 +524,8 @@ int subprocSystem(const char **argv, char **env)
|
|||||||
}
|
}
|
||||||
if (WIFSIGNALED(status)) {
|
if (WIFSIGNALED(status)) {
|
||||||
int exit_signal = WTERMSIG(status);
|
int exit_signal = WTERMSIG(status);
|
||||||
LOG_W("PID %d killed by a signal: %d (%s)", pid, exit_signal,
|
LOG_W("PID %d killed by signal: %d (%s)", pid, exit_signal,
|
||||||
strsignal(exit_signal));
|
utilSigName(exit_signal));
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
LOG_W("Unknown exit status: %d", status);
|
LOG_W("Unknown exit status: %d", status);
|
||||||
|
19
util.c
19
util.c
@ -25,6 +25,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
#include <signal.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -241,3 +242,21 @@ uint64_t utilRnd64(void)
|
|||||||
rndX = a * rndX + c;
|
rndX = a * rndX + c;
|
||||||
return rndX;
|
return rndX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern const char *sys_sigabbrev[];
|
||||||
|
static __thread char arch_signame[32];
|
||||||
|
|
||||||
|
const char *utilSigName(int signo)
|
||||||
|
{
|
||||||
|
if (signo < 0 || signo > _NSIG) {
|
||||||
|
snprintf(arch_signame, sizeof(arch_signame), "UNKNOWN-%d", signo);
|
||||||
|
return arch_signame;
|
||||||
|
}
|
||||||
|
if (signo > __SIGRTMIN) {
|
||||||
|
snprintf(arch_signame, sizeof(arch_signame), "SIG%d-RTMIN+%d", signo,
|
||||||
|
signo - __SIGRTMIN);
|
||||||
|
return arch_signame;
|
||||||
|
}
|
||||||
|
snprintf(arch_signame, sizeof(arch_signame), "SIG%s", sys_sigabbrev[signo]);
|
||||||
|
return arch_signame;
|
||||||
|
}
|
||||||
|
1
util.h
1
util.h
@ -40,5 +40,6 @@ bool utilCreateDirRecursively(const char *dir);
|
|||||||
int utilSSnPrintf(char *str, size_t size, const char *format, ...);
|
int utilSSnPrintf(char *str, size_t size, const char *format, ...);
|
||||||
bool utilIsANumber(const char *s);
|
bool utilIsANumber(const char *s);
|
||||||
uint64_t utilRnd64(void);
|
uint64_t utilRnd64(void);
|
||||||
|
const char *utilSigName(int signo);
|
||||||
|
|
||||||
#endif /* NS_UTIL_H */
|
#endif /* NS_UTIL_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user