카테고리:

3 분 소요

문제 상황

가끔 HustOJ로 구축된 사이트를 운영하다보면 ‘실행중 에러 AC:0%’라고 표시되며 아래와 같은 오류를 출력하는 경우가 있다.

/1706/0601.in:[ERROR] solution_id:14111 called a Forbidden system call:275 [4294967059]

TO FIX THIS , ask admin to add the CALLID into corresponding LANG_XXV[] located at okcalls32/64.h, and recompile judge_client.

if you are admin and you don’t know what to do, 中文解释查看知乎 https://zhuanlan.zhihu.com/p/24498599

이를 해석하면, 고치기 위해서는 관리자에게 연락하여 core/judge_client 경로에 존재하는 okcalls32/64.h에 LANG_XXV[] 부분에 275를 추가하고 재 컴파일 후 judge_client를 재시작하라고 한다.

하지만 이는 오래된 해결법으로 해결 방법은 아래와 같다.

문제 해결

1. 사용자가 제출한 언어와 system call 번호를 파악한다.

※ 위의 상황은 파이썬에서 특정 소스코드를 제출했을 때 발생한 문제이다.

2. HustOJ가 설치된 경로에서 ./core/judge_client 경로로 이동한다.

cd ../../
cd /home/judge/src/core/judge_client

3. okcalls32.h를 열어 수정한다. (맨 뒤에 오류를 일으켰던 275를 추가했다.)

//python

int LANG_YV[CALL_ARRAY_SIZE]={3,4,5,6,11,20,22,33,41,45,54,85,91,116,122,125,140,174,175,183,
		191,192,195,196,197,199,200,201,202,220,221,243,252,258,265,295,
		311,13,41,91,102,186,221,240,295,355,0,275};

4. okcalls64.h를 열어 수정한다. (맨 뒤에 오류를 일으켰던 275를 추가했다.)

//python

int LANG_YV[CALL_ARRAY_SIZE] = {
        0,1,2,3,4,5,6,8,9,10,11,12,13,14,16,17,21,32,39,41,42,49,59,72,78,79,89,97,99,102,104,106,107,108,131,137,158,186,202,217,218,228,231,257,262,273,302,318,334,
        SYS_write, SYS_mprotect, SYS_getuid, SYS_getgid, SYS_geteuid, SYS_getegid, SYS_munmap, SYS_brk,
        SYS_rt_sigaction, SYS_sigaltstack, SYS_rt_sigprocmask, SYS_sched_get_priority_max, SYS_arch_prctl, SYS_ioctl,
        SYS_pread64, SYS_getxattr, SYS_open, SYS_futex, SYS_access, SYS_getdents64, SYS_set_tid_address, SYS_clock_gettime,
        SYS_exit_group, SYS_mremap, SYS_openat, SYS_unshare, SYS_set_robust_list, SYS_close, SYS_prlimit64,
        SYS_dup, SYS_getpid, SYS_stat, SYS_socket, SYS_connect, SYS_fstat, SYS_execve, SYS_lstat,
        SYS_exit, SYS_fcntl, SYS_getdents, SYS_getcwd, SYS_lseek, SYS_readlink, SYS_mmap, SYS_getrlimit,
        SYS_sysinfo, 0, 275 };

5. 수정이 끝났으면 hustoj 서비스를 중지한다.

service hustoj stop

6. 이제 hustoj judge_client를 재 컴파일한다.

cd ../
bash make.sh

7. 재 컴파일했으므로 hustoj 서비스를 재시작한다.

service hustoj start

8. 이후 재제출하면 제대로 컴파일되어 채점이 된다.

태그: Forbidden system call, hustoj, judge_client, LANG_XXV, okcalls32/64.h, PYTHON, 파이썬

업데이트: