diff --git a/launcher.c b/launcher.c index 5c70330..741c506 100644 --- a/launcher.c +++ b/launcher.c @@ -30,6 +30,7 @@ void print_help(char *self) { LOG_WARN(" --file_output path to output file"); LOG_WARN(" --file_info path to info file"); LOG_WARN(" --program program to run"); + LOG_WARN(" --program_arg program argument (only accept one argument)"); LOG_WARN(" --help print this help message"); } @@ -46,6 +47,7 @@ void parse(int argc, char *argv[]) { [CFG_FILE_OUTPUT] = {"file_output", required_argument, NULL, 0}, [CFG_FILE_INFO] = {"file_info", required_argument, NULL, 0}, [CFG_PROGRAM] = {"program", required_argument, NULL, 0}, + [CFG_PROGRAM_ARG] = {"program_arg", required_argument, NULL, 0}, [CFG_IS_VALID] = {"help", no_argument, NULL, 0}, [CFG_IS_VALID + 1] = {NULL, 0, NULL, 0} }; @@ -74,7 +76,7 @@ void parse(int argc, char *argv[]) { } void launch_child() { - char *args[] = {config[CFG_PROGRAM], NULL}; + char *args[] = {config[CFG_PROGRAM], config[CFG_PROGRAM_ARG], NULL}; /* build stdin */ { int fd = open(config[CFG_FILE_INPUT], O_RDONLY); @@ -141,6 +143,8 @@ int main(int argc, char *argv[]) { ret = wait4(child, &status, 0, &usage); clock_gettime(CLOCK_MONOTONIC, &time_end); + // LOG_DEBUG("Children exited, status = %d, ret = %d", status, ret); + long long time_usage = (time_end.tv_sec - time_begin.tv_sec) * 1000 + (time_end.tv_nsec - time_begin.tv_nsec) / 1000000; diff --git a/launcher.h b/launcher.h index 3fa36a3..0dc3eb8 100644 --- a/launcher.h +++ b/launcher.h @@ -13,6 +13,7 @@ enum ConfigIndex { CFG_FILE_OUTPUT, CFG_FILE_INFO, CFG_PROGRAM, + CFG_PROGRAM_ARG, CFG_IS_VALID }; diff --git a/rules/lang_c_cpp.c b/rules/lang_c_cpp.c index 5e7d3e1..3e362cf 100644 --- a/rules/lang_c_cpp.c +++ b/rules/lang_c_cpp.c @@ -8,7 +8,6 @@ void setup_lang_c_cpp(scmp_filter_ctx ctx) { SCMP_SYS(clone), // 56 SCMP_SYS(futex), // 202 SCMP_SYS(set_tid_address), // 218 - SCMP_SYS(exit_group), // 231 SCMP_SYS(set_robust_list), // 273 SCMP_SYS(get_robust_list), // 274 SCMP_SYS(rseq), // 334 diff --git a/rules/lang_go.c b/rules/lang_go.c index 94492c6..ac857e4 100644 --- a/rules/lang_go.c +++ b/rules/lang_go.c @@ -11,7 +11,6 @@ void setup_lang_go(scmp_filter_ctx ctx) { SCMP_SYS(sigaltstack), // 131 SCMP_SYS(gettid), // 186 SCMP_SYS(sched_getaffinity), // 204 - SCMP_SYS(exit_group), // 231 }; ADD_RULE_LIST(white, SCMP_ACT_ALLOW); } diff --git a/rules/rules.c b/rules/rules.c index 0262458..453b3f2 100644 --- a/rules/rules.c +++ b/rules/rules.c @@ -43,6 +43,7 @@ void setup_common(scmp_filter_ctx ctx, const char *exe_path) { SCMP_SYS(clock_gettime), // 228 SCMP_SYS(clock_getres), // 229 SCMP_SYS(clock_nanosleep), // 230 + SCMP_SYS(exit_group), // 231 SCMP_SYS(newfstatat), // 262 SCMP_SYS(getrandom), // 318 diff --git a/utils/log.h b/utils/log.h index 9297f20..c6bcd79 100644 --- a/utils/log.h +++ b/utils/log.h @@ -7,6 +7,7 @@ #define COLOR_RED "\x1B[1;31m" #define COLOR_YELLOW "\x1B[1;33m" #define COLOR_GREEN "\x1B[1;32m" +#define COLOR_GRAY "\x1B[1;37m" #define COLOR_STDOUT_RESET "\x1B[0m" #define _LOG(color, level, fmt, ...) \ @@ -15,8 +16,9 @@ ##__VA_ARGS__); \ } while (0) -#define LOG_INFO(fmt, ...) _LOG(COLOR_GREEN, "I", fmt, ##__VA_ARGS__) -#define LOG_WARN(fmt, ...) _LOG(COLOR_YELLOW, "W", fmt, ##__VA_ARGS__) -#define LOG_ERR(fmt, ...) _LOG(COLOR_RED, "E", fmt, ##__VA_ARGS__) +#define LOG_DEBUG(fmt, ...) _LOG(COLOR_GRAY, "D", fmt, ##__VA_ARGS__) +#define LOG_INFO(fmt, ...) _LOG(COLOR_GREEN, "I", fmt, ##__VA_ARGS__) +#define LOG_WARN(fmt, ...) _LOG(COLOR_YELLOW, "W", fmt, ##__VA_ARGS__) +#define LOG_ERR(fmt, ...) _LOG(COLOR_RED, "E", fmt, ##__VA_ARGS__) #endif // WOJ_SANDBOX_LOG_H